Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mo 28.04.14 13:37 
Hallo,
ich habe eine Methode die Daten aus einer MySQL Datenbank besorgt und einen Datatable zurück gibt.

Mit dieser fülle ich das DataGridview.

Nun möchte ich gern, dass wenn ein bestimmter Wert gefunden wurde die Zeile markiert wird.

Probiert habe ich es so
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
                try
                {
                        foreach (DataGridViewRow viewRow in dgvModul.Rows)
                        {
                            if (viewRow.Cells[2].Value.ToString().Equals("Suchwort"))
                            {
                                viewRow.Selected = true;
                                break;
                            }
                        }
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message);
                }


Er bemängelt nun folgendes:
Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein. Parametername: index

Edit: Der Index beginnt bei 0 und somit hätte ich in 1 suchen müssen. Sorry
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 28.04.14 14:29 
Ich würde eher nicht empfehlen das Grid selbst zu durchsuchen sondern wenn du DataBinding verwendet hast das in der Datenmenge dahinter zu tun. Bei einer DataTable zum Beispiel.

ausblenden C#-Quelltext
1:
2:
3:
var rows = meineLiebeDataTable.Select("MeinLiebeSpalte = 'Suchwort'");
if(rows.Count > 0)
    meineLiebeBindingSource.Current = rows(0);
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 30.04.14 18:45 
Hi,
also ich muss mich unbedingt noch mehr mit dem DataBinding zeug beschäftigen.
Früher brauchte ich das nie und muss das erst noch verinnerlichen.

Das DataGridView befülle ich über DataSource mit dem dem DataTable.

Wie müsste es aussehen, wenn ich die DataBinding verwenden will?
Mit dem Binden an eine Modellklasse habe ich soweit verstanden, auch wenn es noch nicht ganz läuft, aber wie binde ich ein DataGridview an ein DataTable?

Danke

Gruß

EDIT: Gerade gesehen, dass in einem meiner Bücher ein Kapital darüber ist. Werde es heute Abend anfangen zu lesen in der Hoffnung es hilft mir und belastet eure Zeit nicht weiter
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 01.05.14 10:49 
Zitat:
Das DataGridView befülle ich über DataSource mit dem dem DataTable.


Das ist schon DataBinding ;) Es hilft nur manchmal eine BindingSource dazwischen zu schalten wie ich es im Beispielcode gezeigt hatte.
Durch die BindingSource ist es a.) einfacher eine Quelle an viele Controls zu binden und auszutauschen denn man muss nur einmal die BindingSource.DataSource setzen und nicht alle beteiligten Controls durchrennen und deren Binding erneuern b.) du erhältst die Verwaltung des aktuellen Datensatzes über die BindingSource.Current Property. Wenn du also zum Beispiel an ein Grid und eine TextBox über die gleiche BindingSource bindest würdest du durch die Auswahl im Grid den aktuellen Datensatz ändern und die Textbox das automatisch passend nachziehen und dann Daten aus dem gerade aktuell gewordenen Datensatz anzeigen.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Do 01.05.14 14:45 
Vielen Dank
Das müsste soweit passen :-)