使用CheckBoxColumn1.Name
代替CheckBoxColumn1.Index
然后按钮被点击后,利用价值似乎是一个小小的瓶颈给我。
为了避免铸件的DataGridViewRow和布尔,我的建议是一样的东西(未测试):
int colIndex = CheckBoxColumn1.Index; // or dataGridView1.Columns.IndexOf(CheckBoxColumn1.Name) ?
for (int r = 0; r < dataGridView1.RowCount; r++)
{
if (true.Equals(dataGridView1[colIndex, r].Value))
{
//...
}
}
使用细胞事件的其他答案是更好,因为在必要时检查排列表将准备,但根据您如何进行过滤和休息,维护/调试可能会更困难。这是我的版本:
private HashSet<int> checkedRowIndexes = new HashSet<int>();
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == CheckBoxColumn1.Index)
{
if (true.Equals(dataGridView1[CheckBoxColumn1.Index, e.RowIndex].Value))
checkedRowIndexes.Add(e.RowIndex);
else
checkedRowIndexes.Remove(e.RowIndex);
}
}
为什么你让你的用户筛选4000行? – LarsTech
3000或4000行并不多。你有没有一个实际的性能问题? – Paparazzi
@LarsTech这是用户的愿望。他们也将能够通过这个过滤。 – Iason