如何检查数据网格视图中的复选框是否已选中

时间:2011-10-28 11:17:48

标签: c# winforms datagridview

如何检查bool中复选框的datagridview条件。如果选中,我希望true,如果未选中则false。任何人都可以帮助我。

是否可以在dataGridView_CellContentClick

中处理此问题

5 个答案:

答案 0 :(得分:6)

有关DataGridView herehere的MSDN页面上的一点说明。

他们特别说:

  

对于DataGridViewCheckBoxCell中的点击,此事件发生在   复选框更改值,因此如果您不想计算   基于当前值的预期值,您通常会处理   而是DataGridView.CellValueChanged事件。因为那件事   仅在提交用户指定的值时才会发生   通常在焦点离开细胞时发生,你也必须处理细胞   DataGridView.CurrentCellDirtyStateChanged事件。在那个处理程序中,如果   当前单元格是一个复选框单元格,调用DataGridView.CommitEdit   方法并传递Commit值。

所以他们建议不要使用CellClick类型的事件(因为他们从不推送值直到你离开单元格),而是使用CurrentCellDirtyStateChanged和CommitEdit方法。

所以你最终得到:

dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);

void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.Columns[e.ColumnIndex].Name == "CB")
    {
        MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());    
    }
}

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

至于获取选中的值 - 这只是DataGridViewCheckBoxCell的Value属性。

所以,如果你去:

dataGridView1.Rows[rowindex].Cells[cellindex].Value 

你得到一个与复选框相对应的布尔值(在提交更改后)。

答案 1 :(得分:0)

如果在设计器中定义了复选框,则只需查看复选框的名称并检查其“checked”属性是否为true / false。

但我怀疑你是通过代码将复选框添加到数据网格?

在这种情况下,您必须保存对somwhere复选框的引用。 如果我将你添加到datagrid的所有复选框添加到列表中,或者如果你想通过名称引用它们,我会将它们添加到字典中。

您还可以通过选择事件并单击属性面板中的小螺栓图标并找到checkedChanged事件并双击它来将事件绑定到Checked_Changed事件复选框。

在事件代码中,您可以通过键入以下内容获取单击的复选框: CheckBox mycheckbox = sender作为CheckBox;

,然后引用mycheckbox.checked获取bool,如果已选中或未选中。

答案 2 :(得分:0)

您可以尝试以这种方式获取此信息,例如,如果您根据索引循环网格,则可以找到已检查状态。

bool IsChecked = Convert.ToBoolean((dataGridView1[ColumnIndex, RowIndex] as DataGridViewCheckBoxCell).FormattedValue))

答案 3 :(得分:0)

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var checkcell = new DataGridViewCheckBoxCell();
    checkcell.FalseValue = false;
    checkcell.TrueValue = true;
    checkcell.Value = false;
    dataGridView1[0, 0] = checkcell; //Adding the checkbox

    if (((bool)((DataGridViewCheckBoxCell)dataGridView1[0, 0]).Value) == true)
    {
        //Stuff to do if the checkbox is checked
    }
}

答案 4 :(得分:0)

100%工作。

 private void grd_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            grd.CommitEdit(DataGridViewDataErrorContexts.Commit);
            bool Result = Convert.ToBoolean((grd[e.ColumnIndex, e.RowIndex] as DataGridViewCheckBoxCell).Value);
        }