Как изменить значение ячейки для всего столбца datagridview?
Я бы хотел, чтобы столбец datagridview проверял все или не проверял ничего. Приведенный ниже код работает, но есть ли более простой / быстрый способ сделать это? Для установки значения для всех ячеек в столбце?
if(searchResultsGrid.Columns["checkboxColumn"].HeaderText == "CheckAll")
{
searchResultsGrid.Columns["checkboxColumn"].HeaderText = "UncheckAll";
foreach (DataGridViewRow row in searchResultsGrid.Rows)
{
row.Cells["checkboxColumn"].Value = true;
searchResultsGrid.UpdateCellValue(0, row.Index);
}
}
else
{
searchResultsGrid.Columns["checkboxColumn"].HeaderText = "CheckAll";
foreach (DataGridViewRow row in searchResultsGrid.Rows)
{
row.Cells["checkboxColumn"].Value = false;
searchResultsGrid.UpdateCellValue(0, row.Index);
}
}
1 ответ:
Вы могли бы достичь этого другим путем с помощью какого-нибудь обмана. Столбец должен быть
ReadOnly, а значения ячеекNull. Щелчок по любой ячейке в столбце переключит значение по умолчаниюNullValueстолбца; по сути, переключение каждой ячейки.DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn(false); chk.HeaderText = "CheckAll"; chk.Name = "checkboxColumn"; chk.ReadOnly = true; this.dataGridView1.Columns.Add(chk); this.dataGridView1.CellClick += DataGridView1_ToggleAll;
private void DataGridView1_ToggleAll(object sender, DataGridViewCellEventArgs e) { DataGridViewCheckBoxColumn col = this.dataGridView1.Columns[e.ColumnIndex] as DataGridViewCheckBoxColumn; if (col?.Name == "checkboxColumn") { bool checkAll = (bool)col.DefaultCellStyle.NullValue; col.HeaderText = checkAll ? "CheckAll" : "UncheckAll"; col.DefaultCellStyle.NullValue = !checkAll; } }Но обратите внимание: чтобы получить проверенное состояние, вы бы использовали
cell.EditedFormattedValueи неcell.Value. (Потому чтоValueпо необходимости всегда будетnull, чтобы этот трюк сработал.)
Это имеет творческий оттенок, но вы также должны подумайте о будущих разработчиках. Когда вы решите оптимизировать код, вы должны спросить, как это повлияет на обслуживание. Циклы легко понять и по-прежнему выполнять быстро. Вы должны взвесить все по достоинству.Ниже приведены фрагменты из моих результатов в 100 запусках, каждый из которых содержит 10 000 строк данных. Это были времена выполнения переключения строк:
Стандартный Цикл
Elapsed = 00:00:00.0315538 Elapsed = 00:00:00.0107964 Elapsed = 00:00:00.0676696 Elapsed = 00:00:00.0232370 Elapsed = 00:00:00.0243285Переключение Значений Null
Elapsed = 00:00:00.0006645 Elapsed = 00:00:00.0006712 Elapsed = 00:00:00.0006804 Elapsed = 00:00:00.0007579 Elapsed = 00:00:00.0003037Примечание: nullvalue переключение скорости было последовательный, несмотря на количество строк. Для небольших данных (1000 строк) цикл был на 2/3 быстрее, чем метод NullValue.
Comments