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)");
}
}