1
我在DataGridView中有一個複選框列,我想驗證用戶是否可以通過計算它們點擊的複選框的數量來檢查複選框,然後決定 然後禁用檢查。如何禁用DataGridView中的複選框列 - Windows窗體?
有人可以指導我如何有效地做到這一點?
我在DataGridView中有一個複選框列,我想驗證用戶是否可以通過計算它們點擊的複選框的數量來檢查複選框,然後決定 然後禁用檢查。如何禁用DataGridView中的複選框列 - Windows窗體?
有人可以指導我如何有效地做到這一點?
快速代碼示例:
public partial class DGVCheckBoxTesting : Form
{
private const int MAX_CHECKS = 5;
public DGVCheckBoxTesting()
{
InitializeComponent();
this.dataGridView1.Columns.Add("IntColumn", "IntColumn");
this.dataGridView1.Columns.Add(new DataGridViewCheckBoxColumn { Name = "BoolColumn" });
for (int i = 0; i <= 10; i++)
{
this.dataGridView1.Rows.Add(i, false);
}
this.dataGridView1.CellContentClick += new DataGridViewCellEventHandler(dataGridView1_CellContentClick);
this.dataGridView1.CellContentDoubleClick += new DataGridViewCellEventHandler(dataGridView1_CellContentDoubleClick);
}
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
this.ValidateCheckBoxState(e);
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
this.ValidateCheckBoxState(e);
}
private void ValidateCheckBoxState(DataGridViewCellEventArgs e)
{
if (e.ColumnIndex != 1) //bool column
{ return; }
this.dataGridView1.EndEdit();
bool value = (bool)this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
int counter = 0;
foreach (DataGridViewRow row in this.dataGridView1.Rows)
{
if (row.Cells[1].Value != null && (bool)row.Cells[1].Value)
{
counter++;
}
}
if (counter > MAX_CHECKS)
{
this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = false;
this.dataGridView1.EndEdit();
}
}
}
基本上,這個代碼是它增加了一個整數列和布爾列到DataGridView。然後,在CellContentClick事件中,如果複選框列被點擊,首先我們提交編輯(如果你不這樣做,你會遇到各種麻煩,搞清楚複選框是否被選中)。然後,我們遍歷行並計算所有檢查的行。然後,如果金額大於我們想要允許的金額,我們將其設置回false,然後再次提交編輯。測試它,它的工作原理。可能不是最優雅的解決方案,但是DGV對於複選框可能會很棘手,所以這就是我要做的。
編輯:只是一個小小的編輯,我迷上了ContentDoubleClick事件,因爲我注意到如果你快速點擊單元格,你能夠擊敗驗證。現在應該更好地工作。
謝謝BFree我會試試看 – Malcolm 2009-02-23 04:32:31