DataGridView选中时选中CheckBox

时间:2017-11-26 15:39:21

标签: c# winforms checkbox datagridview

我有DataGridViewCheckBox,我的问题是当我选择它所属的行时,如何自动勾选CheckBox?我已启用DataGridView的完整行选择。

2 个答案:

答案 0 :(得分:1)

DataGridView有一个名为SelectionChanged的事件,每次用户选择不同的行时都会触发该事件(从技术上讲,如果启用了多选,则如果选择被扩展或缩小,它也将触发) 。如果您将事件处理程序附加到此处,则可以获取DGV中当前选定的行并操纵DataGridViewCheckBoxColumn单元格的值。

使用DGV时,大部分时间我都是通过绑定源处理绑定数据。我通常发现处理绑定源引发的事件并操纵其绑定列表或底层模型更可靠,但如果您没有使用绑定数据,则此路由将不可用。

答案 1 :(得分:1)

我认为这不是解决这个问题的最佳方案,但这可能会很好。

示例用户界面:

enter image description here

我在datagridview中设置的属性是:
[MultiSelect = False]
[SelectionMode = FullRowSelect]

datagridview_CellClick Event 中必须添加以下代码:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
   if (e.RowIndex >= 0)
       this.dataGridView1.Rows[e.RowIndex].Cells["colSelect"].Value = true;
}


如果您计划只需点击一次,则必须应用此代码:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
   if (e.RowIndex >= 0)
   {
       var count = from hasValue in dataGridView1.Rows.Cast<DataGridViewRow>()
                   where Convert.ToBoolean(hasValue.Cells["colSelect"].Value) == true
                   select hasValue;

       if(count.Count() <= 0)
           this.dataGridView1.Rows[e.RowIndex].Cells["colSelect"].Value = true;
   }
}


另一种方式:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
   if (e.RowIndex >= 0) 
   {
         foreach (DataGridViewRow row in this.dataGridView1.Rows)
             row.Cells["colSelect"].Value = false;

            this.dataGridView1.Rows[e.RowIndex].Cells["colSelect"].Value = true;
   }

}