Entwickler-Ecke
WinForms - DataGridView: Weitersuche
Castrol519 - Mo 11.06.18 13:39
Titel: DataGridView: Weitersuche
Hi Leute, hoffe ich bin hier richtig.
Ich öffne via Datagridview eine CSV Datei, in dieser CSV datei wird dann gearbeitet. (Namen rausgesucht, Datums eingefügt etc..)
nun habe ich eine Suche programmiert welche mir zumindest die Zeilen markiert in denen das gesuchte Wort vorkommt. Allerdings wäre es nun praktisch, dass das Programm auch zur Zeile springt bzw. auch zur übernächsten wenn die erste nicht die richtige ist!
Leider stoßen hier meine Kenntnisse an ihre Grenzen. Vielleicht kann mir ja jemand von euch helfen?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102:
| void ReadCSV(String file) { Clear_all(); String rowValue; string[] cellValue;
if (System.IO.File.Exists(file)) { StreamReader streamReader = new StreamReader(file); rowValue = streamReader.ReadLine(); cellValue = rowValue.Split(';');
for (int i = 0; i <= cellValue.Count() - 1; i++) { DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
column.Name = cellValue[i]; column.HeaderText = cellValue[i]; dataGridView1.Columns.Add(column); }
while (streamReader.Peek() != -1) { rowValue = streamReader.ReadLine(); cellValue = rowValue.Split(';'); dataGridView1.Rows.Add(cellValue); }
streamReader.Close(); }
}
void searchCSV() {
string searchValue = search.Text; DataGridViewRow row;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; try { for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { row = dataGridView1.Rows[i];
for (int j = 0; j < 8; j++) {
if (row.Cells[j].Value == null) continue;
if (row.Cells[j].Value.ToString().Contains(searchValue)) { row.Selected = true; break; } } } } catch (Exception exc) { MessageBox.Show(exc.Message); }
}
void SaveCSV(String file) { StreamWriter streamWriter = new StreamWriter(file); string strHeader = "";
for (int i = 0; i<dataGridView1.Columns.Count; i++) { strHeader += dataGridView1.Columns[i].HeaderText + ";"; } strHeader = strHeader.TrimEnd(';');
streamWriter.WriteLine (strHeader);
for(int m = 0; m< dataGridView1.Rows.Count -1; m++) { string strRowValue = "";
for(int n = 0; n < dataGridView1.Columns.Count; n++) { strRowValue += dataGridView1.Rows[m].Cells[n].Value + ";"; } strRowValue = strRowValue.TrimEnd(';'); streamWriter.WriteLine(strRowValue); } streamWriter.Close(); } |
Moderiert von Christian S.: C#-Tags hinzugefügt
Moderiert von Th69: Topic aus C# - Die Sprache verschoben am Mo 11.06.2018 um 14:35
Moderiert von Th69: Titel geändert (war "Weitersuche").
Th69 - Mo 11.06.18 14:42
Hallo und :welcome:
was genau meinst du mit "zur Zeile springt"? Hast du eine Scrollbar und das Programm soll dann dorthin scrollen? Mittels der Eigenschaft FirstDisplayedScrollingRowIndex kannst du den Index setzen.
Castrol519 - Mo 11.06.18 15:00
Hallo :)
ja genau das mein ich damit,
auf die Eigenschaft bin ich auch schon gestoßen
allerdings ohne Erfolg, hättest du eine Idee wie ich es einbauen kann?
Th69 - Mo 11.06.18 15:54
Innerhalb deiner Suchschleife einfach
C#-Quelltext
1:
| dataGridView1.FirstDisplayedScrollingRowIndex = i; |
(und dazu die Schleife rückwärts durchsuchen lassen:
for (int i = dataGridView1.Rows.Count - 1; i >= 0; i--))
Castrol519 - Di 12.06.18 07:35
Habe ich so gemacht, allerdings scrollt er mir leider nicht dorthin...
Er scrollt dann leider immer nach ganz oben
Th69 - Di 12.06.18 08:59
Hast du dies denn auch in den if-Block hinzugefügt?
Ansonsten zeige noch mal deine searchCSV-Methode (btw. SearchCSV wäre als Name besser).
Castrol519 - Di 12.06.18 09:11
ok nein, beim 1. Klappt es jetzt! Danke :)
allerdings, wie sieht es aus wenn ich den Datensatz 2x oder öfters noch im DGV habe?
er springt nämlich immer nur zum 1. :(
Th69 - Di 12.06.18 09:55
Was erwartest du denn? Das DataGridView kann ja nur genau zu einer Zeile "springen".
Möchtest du über einen weiteren Button (oder Key) zum nächsten Datensatz springen?
Dann mußt du ab dem aktuellen den nächsten Datensatz suchen (bzw. die nächst markierte Zeile).
Und eine evtl. Rückwärtssuche analog (in die andere Richtung suchen).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!