Autor Beitrag
Castrol519
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 11.06.18 13:39 
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?

ausblenden volle Höhe 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;
            //int rowIndex = -1;  // Für 2. Variante
            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 == nullcontinue;

                        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 user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Mo 11.06.2018 um 14:35
Moderiert von user profile iconTh69: Titel geändert (war "Weitersuche").
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 11.06.18 15:54 
Innerhalb deiner Suchschleife einfach
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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).