使用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