2009-02-23 72 views

回答

1

快速代碼示例:

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事件,因爲我注意到如果你快速點擊單元格,你能夠擊敗驗證。現在應該更好地工作。

+0

謝謝BFree我會試試看 – Malcolm 2009-02-23 04:32:31

相關問題