Entwickler-Ecke

WinForms - DataGridView Zeile markieren anhand SuchString


Talemantros - Mo 28.04.14 13:37
Titel: DataGridView Zeile markieren anhand SuchString
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

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 - 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.


C#-Quelltext
1:
2:
3:
var rows = meineLiebeDataTable.Select("MeinLiebeSpalte = 'Suchwort'");
if(rows.Count > 0)
    meineLiebeBindingSource.Current = rows(0);


Talemantros - 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 - 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 - Do 01.05.14 14:45

Vielen Dank
Das müsste soweit passen :-)