Autor Beitrag
dennisbz
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 16.05.07 19:50 
Hallo zusammen,

erstmal vorweg: ich bin blutiger Anfänger...

Ich schreibe gerade zum Üben ein Vokabelprogramm. Dieses enthält zwei Textboxen zum
Eingeben der gesuchten Vokabel und ein DataGridView, in welches beim Start der Form
erst mal alle Vokabeln aus ner Textdatei geladen werden. Nach Eingeben des gesuchten
Wortes und Klicken auf den entsprechenden Button wird das Grid nach diesem String
durchsucht und markiert die entsprechende Zeile.
Soweit so gut. Jetzt würde ich gern den Fokus auf die entsprechende Zeile setzen lassen.

Ich habe sicher schon fast jedes Forum durchsucht... Aber leider fast nichts entsprechendes
gefunden. Dem Einzigen der das selbe Problem hat wurde vorgeschlagen die Methode 'scrollTo'
(oder so ähnlich) zu verwenden. Leider schlägt mir VS diese aber nicht vor.

Wie könnte ich das Problem lösen?

Vielen Dank schon mal im Voraus,

Dennis
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 17.05.07 10:30 
Hallo Dennis,

verstehe ich Dich richtig, dass Du aus einer Textdatei einfache Wertepaare (z.B. in der Art "deutsch=german") hast und diese in die Zellen des DataGridView überträgst? Du hast also insbesondere keine indizierte Datasource (z.B. DataTable, HashTable) dahinter?

Dann bleibt Dir nichts anderes übrig, als alle Zeilen durchzugehen, bis Du die passende getroffen hast; dort wird CurrentCell neu gesetzt. Allerdings geht das mindestens bis zu 1000 Einträgen ruck-zuck (wahrscheinlich auch noch bei viel mehr Einträgen):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
MyDataGridView.SuspendLayout();
int x0 = -1;
bool bTreffer;
do {
    x0++;
    //  Annahme: der Suchbegriff steht in Spalte 0
    bTreffer = (string)MyDataGridView.Rows[x0].Cells[0].Value;
while (x0 < MyDataGridView.Rows.Count || (!bTreffer));
if (bTreffer)
    MyDataGridView.CurrentCell = MyDataGridView.Rows[x0].Cells[0];
MyDataGridView.ResumeLayout();

Direkte Suchfunktionen nach Inhalten einzelner Zellen gibt es in DataGridView nicht; mit einer Datenquelle (s.o.) hat man es viel leichter.

Merke: In ADO.NET wird grundsätzlich zwischen den Daten (z.B. DataTable) und der Anzeige (z.B. DataGridView) getrennt. Wenn man das beachtet, wird vieles einfacher.

Viel Erfolg!

PS. Ein Blick in die SDK-Doku unter ScrollTo zeigt, dass es diese Methode beim DataGridView nicht gibt.
dennisbz Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 17.05.07 12:02 
Hallo JüTho,

erstaml Danke für die raschen Antwort!
CurrentCell war die Eigenschaft(?), die ich gesucht habe. Super, es klappt!

In meiner Textfile stehen einfach die Vokabeln, getrennt von einem Semikolon - mit abschließendem
Zeilenumbruch, drin. Also:

englisch;deutsch
englisch;deutsch

Ich hatte das Grid bereits nach dem gesuchten Begriff durchlaufen lassen, das Problem war das
Setzten des Focus auf die Zeile mit dem gesuchten Begriff.
Aber wie gesagt, CurrentCell ...

Nochmals Danke,

viele Grüße

Dennis