private void TB_search_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(TB_LastName.Text) && string.IsNullOrWhiteSpace(TB_FirstName.Text) && string.IsNullOrWhiteSpace(TB_Patronymic.Text)) { LoadGrid(); return; } Task.Factory.StartNew(() => { P_Loading.Show(); L_LoadText.Text = "Идет поиск данных"; TB_search.Enabled = false; DataGridView new_dgv = new DataGridView(); //буфер для загрузки данных foreach (DataGridViewColumn column in DGV_invoice.Columns) //скопировали структуру таблицы во временную таблицу { new_dgv.Columns.Add((DataGridViewColumn)column.Clone()); } foreach (DataGridViewRow row in DGV_invoice.Rows) { if (row.Cells[0].Value != null) { if ((row.Cells[1].Value.ToString().ToLower() == TB_LastName.Text.Trim().ToLower()) || (row.Cells[2].Value.ToString().ToLower() == TB_FirstName.Text.Trim().ToLower()) || (row.Cells[3].Value.ToString().ToLower() == TB_Patronymic.Text.Trim().ToLower())) { new_dgv.Rows.Add(row.Cells[0].Value, row.Cells[1].Value, row.Cells[2].Value, row.Cells[3].Value, row.Cells[4].Value); } } } DGV_invoice.Rows.Clear(); Thread.Sleep(300);//тестовым путем выяснилось, что необходимо притормозить поток, иначе в RunTime ошибка отрисовки таблицы Copy(new_dgv); P_Loading.Hide(); TB_search.Enabled = true; }, TaskCreationOptions.LongRunning); }
/// <summary> /// Загружает данные из БД в таблицу /// </summary> private void LoadGrid() { Task.Factory.StartNew(() => { P_Loading.Show(); TB_search.Enabled = false; BT_add.Enabled = false; TSL_allSum.Text = "Сумма всех счетов: "; DataGridView new_dgv = new DataGridView(); foreach (DataGridViewColumn column in DGV_invoice.Columns) { new_dgv.Columns.Add((DataGridViewColumn)column.Clone()); } var tmp = (List <object[]>)Functions.AccountAction(new AccountActionParams() { action = UserAction.show }); double sum = 0; DGV_invoice.Rows.Clear(); foreach (var t in tmp) { new_dgv.Rows.Add(t[1], t[2], t[3], t[4], t[5]); new_dgv.Rows[new_dgv.Rows.Count - 2].Tag = t[0];//для каждой строки сохраняем соответствующий ей id из БД sum += Convert.ToDouble(t[5]); } Copy(new_dgv); TSL_allSum.Text = "Сумма всех счетов: " + sum.ToString() + " тыс."; P_Loading.Hide(); TB_search.Enabled = true; BT_add.Enabled = true; }, TaskCreationOptions.LongRunning); }