Optymalizacja szukania w datagridview

0

Witam serdecznie, na wstępie napiszę, że jestem informatykiem amatorem, który postanowił połączyć pracę z pasją. Zajmuje się handlem internetowym i mam dość sporo do czynienia z plikami CSV. Postanowiłem sobie napisać program do edycji takowych plików. Funkcja działa bez zarzutu, wczytuje dane do datagridview i tu powstaje problem bo moje dane mają po 30 tyś linii w jednym gridzie i STRAAAASZNIE długo to trwa. Bardzo prosze o jakieś sugestie:

To co ma robić kod

  1. biore wartość z 1 grida i szukam jej w 2
  2. znalazłem ok, podstaw cene, nie - szukaj nastepnej wartosci

DODAJE: są tu dwa gridy 1 - mój ze sklepu, 2-gi - od klienta

Oto kod:

            int model1 = dataGridView1.Columns[comboBox1.Text].Index;
            int cena1 = dataGridView1.Columns[comboBox3.Text].Index;

            int model2 = dataGridView2.Columns[comboBox4.Text].Index;
            int cena2 = dataGridView2.Columns[comboBox6.Text].Index;

            int przebieg = dataGridView1.RowCount;
            textBox3.Text = przebieg.ToString();

            for (int i = 0; i <= dataGridView2.RowCount - 1; i++)
            {
                string szukana_wartosc = dataGridView2.Rows[i].Cells[model2].Value.ToString().Trim();


                for (int y = 0; y <= dataGridView1.RowCount - 1; y++)
                {
                    if (szukana_wartosc == dataGridView1.Rows[y].Cells[model1].Value.ToString().Trim())
                    {
                        richTextBox1.Text += "Zmieniono z: " +  dataGridView1.Rows[y].Cells[model1].Value.ToString() + " " + dataGridView1.Rows[y].Cells[cena1].Value.ToString() + 
                            " na: " + dataGridView2.Rows[i].Cells[model1].Value.ToString() + " " + dataGridView2.Rows[i].Cells[cena2].Value.ToString() + "\n";
                        
                        string cena = dataGridView2.Rows[i].Cells[cena2].Value.ToString().Trim();

                        dataGridView1.Rows[y].Cells[cena1].Value = cena;
                        break;
                    }
                    
                    
                }


            }
1

A w jaki sposób ostatecznie wczytujesz CSV? ładując go do DataSeta, a następnie podpinając jako źródło DataGridView można dorobić dość wydajne szukanie / filtrowanie w tej strukturze.

coś w stylu:

 
DataTable filtered = DS.Tables[0].Select("Kolumna1 = '" + szukana_wartosc + "' OR Kolumna2='" +szukana_wartosc+"'");

filtered to nowy source dla DataGridView

0

Oto w jaki sposób wczytuje dane:

 
private static DataTable GetDataTableFromCSVFile(string csvfilePath, string delimeter)
        {
            DataTable csvData = new DataTable();
            using (TextFieldParser csvReader = new TextFieldParser(csvfilePath, Encoding.Default))
            {
                
                csvReader.SetDelimiters(new string[] { delimeter });
                csvReader.HasFieldsEnclosedInQuotes = true;

                
                string[] colFields = csvReader.ReadFields();

                foreach (string column in colFields)
                {
                    DataColumn datecolumn = new DataColumn(column);
                    datecolumn.AllowDBNull = true;
                    csvData.Columns.Add(datecolumn);
                }

                while (!csvReader.EndOfData)
                {
                    string[] fieldData = csvReader.ReadFields();
                    
                 
                    for (int i = 0; i < fieldData.Length; i++)
                    {
                        if (fieldData[i] == "")
                        {
                            fieldData[i] = null;
                        }
                    }
                    csvData.Rows.Add(fieldData);
                }
            }
            return csvData;
        }

a potem z butona wywołuje

 
dataGridView1.DataSource = GetDataTableFromCSVFile(textBox1.Text, delimeterInput);

używam using Microsoft.VisualBasic.FileIO;

0

Wczytaj dane do jakiejś tablicy w pamięci, i w nie wyszukuj, a nie w gridzie. Kontrolki GUI służą do prezentacji danych, a nie ich przetwarzania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1