Optymalizacja dataGridView

0

Witam
Proszę o pomoc w zoptymalizowaniu działania dataGridView.
Aplikacja pracuje na SQL Compact Edition 3.5. W gridzie jest checkbox do zaznaczania odpowiedniego rekordu z którym mają zostać wykonane określone działania. Po zaznaczeniu potrzebuję za każdym razem uaktualnić bazę i jednocześnie odświeżać grida. Gdy danych w tabelce jest niewiele nie ma problemu, ale gdy pojawia się ich więcej już nawet przy około 100 aplikacja strasznie zwalnia.
Uaktualnienie grida robię w metodzie CellValueChanged()
Na obsługę błędów nie zwracajcie uwagi, bo na razie nie jest jeszcze prawidłowo zrobiona.


        private void grdTest_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {            
            UaktualnijWybor();
            PobierzDane();            
        }
        
        private void UaktualnijWybor()      ////funkcja aktualizuje dane dotyczece pola wybor czyli checkboxa w gridzie//
        {            
            try
            {
                for (int i = 0; i < grdTest.Rows.Count; i++)     // // tutaj przeskakuje po całym gridzie i myślę że to jest przyczyna spowolniania aplikacji//
                {
                    string stan = "";
                    int id_stan = 0;
                    stan = grdTest.CurrentRow.Cells["dataGridViewCheckBoxColumn1"].Value.ToString();
                    id_stan = Convert.ToInt32(grdTest.CurrentRow.Cells["dataGridViewTextBoxColumn1"].Value);
                    string updWybor;
                    if (stan == "False")
                    {
                        updWybor = "UPDATE testowa SET wybor=0 WHERE id=" + id_stan.ToString();
                    }
                    else
                    {
                        updWybor = "UPDATE testowa SET wybor=1 WHERE id=" + id_stan.ToString();
                    }
                    SqlCeConnection con = new SqlCeConnection(connstring);
                    con.Open();
                    SqlCeCommand updCom = new SqlCeCommand(updWybor, con);
                    updCom.ExecuteNonQuery();
                }
            }
            catch (SqlCeException)
            {
                MessageBox.Show("Błąd. (UaktualnijWybor)");
            }
        }

        private void PobierzDane()      ////funkcja ma na celu odświeżenie danych w datasecie//
        {
            string selectCommand = "SELECT * FROM testowa";
            try
            {
                SqlCeDataAdapter dataAdapter = new SqlCeDataAdapter(selectCommand, connstring);
                SqlCeCommandBuilder commandBuilder = new SqlCeCommandBuilder(dataAdapter);

                DataTable table = new DataTable();
                dataAdapter.Fill(table);
                BindingSource bs = new BindingSource();
                bs.DataSource = table;
                grdTest.DataSource = bs;

            }
            catch (SqlCeException)
            {
                MessageBox.Show("Błąd. (PobierzDane)");
            }
        }
 
0

To wysyłaj do bazy stan tylko zmienionego checkboxa.
Parametr object sender z handlera CellValueChanged to twój zmieniony cell. Pobierz jego stan i zaktualizuj w bazie.

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