检查DataGridView上的所有复选框项

时间:2012-11-06 00:54:12

标签: c# winforms datagridview checkbox

这是情景。

我有checkbox(姓名:“全部检查”ID:chkItems)和datagridview。当我点击此复选框时,datagridview上的所有复选框也将被选中。

我还在网格上添加了复选框列。

DataGridViewCheckBoxColumn CheckboxColumn = new DataGridViewCheckBoxColumn();
CheckBox chk = new CheckBox();
CheckboxColumn.Width = 20;
GridView1.Columns.Add(CheckboxColumn);

这是复选框背后的代码。 row.Cell

出现问题
private void chkItems_CheckedChanged(object sender, EventArgs e)
{
    foreach (DataGridViewRow row in GridView1.Rows)
    {
        DataGridViewCheckBoxCell chk = e.row.Cells(0);
        if (chk.Selected == false)
        {
            row.Cells(0).Value = true;
        }
    }
}   

已解决(此处为解决方案)

private void chkItems_CheckedChanged(object sender, EventArgs e)
{   
    foreach (DataGridViewRow row in GridView1.Rows)
    {
        DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells[1];
        if (chk.Selected == false)
        {
            chk.Selected = true;
        }
    } 
}   

7 个答案:

答案 0 :(得分:12)

DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell) row.Cells[0];

而不是

DataGridViewCheckBoxCell chk = e.row.Cell(0);

* 编辑: *我认为你真的想这样做:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
       DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell) row.Cells[0];
       chk.Value = !(chk.Value == null ? false : (bool) chk.Value); //because chk.Value is initialy null
}

答案 1 :(得分:1)

    private void setCheckBoxInDataGrid(DataGridView dgv, int pos, bool isChecked)
    {
        for (int i = 0; i < dgv.RowCount; i++)
        {
            dgv.Rows[i].DataGridView[pos, i].Value = isChecked;
        }
    }

我就这样做了

答案 2 :(得分:1)

试试这个

foreach (DataGridViewRow row in this.dataGridView1.Rows)
{
      row.Cells[0].Value = row.Cells[0].Value == false ? true : false;

}

答案 3 :(得分:0)

如果您可以自己向checkboxes of datagridview提供默认状态,即True或False [不指定空状态]状态(执行此操作的原因将在后者中解释)。< / p>

可以通过以下代码完成,(当您搜索要在DataGridView中查看的结果时输入此代码)
dgv是您正在使用的DataGridView的对象。

for (int i = 0; i < dgv.RowCount - 1; i++)
{
     dgv.Rows[i].DataGridView[0, i].Value = true;
}

其中DataGridView[0, i]表示第0列第n行 执行此操作的原因是,在加载时,复选框默认为null状态。代码不是比较null状态(创建对象空引用异常)。所以,一旦你为它指定一个虚假或真实的状态。它永远不会进入null状态 在您要检查的button_click_event中输入以下代码

for (int i = 0; i < dgv.RowCount-1; i++)
{
    if (dgv.Rows[i].Cells[0].Value.ToString() != "")
    {
        dgv.Rows[i].Cells[0].Value = false;
    }
    else
    {
        dgv.Rows[i].Cells[0].Value = true;
    }
}

它为我工作,我希望它能为你做到。

答案 4 :(得分:0)

我尝试选中所有复选框或选择它的相互关系并计算一些值......所以写下这段代码可能会有所帮助。

foreach (DataGridViewRow item in DGDoc.Rows)
{
    if (item.Cells[0].Value == null)
        item.Cells[0].Value = "True";
    if (bool.Parse(item.Cells[0].Value.ToString()))
    {
        item.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(241, 215, 215);
        strIDs += "," + item.Cells[1].Value.ToString();
        intSumPrice += Int64.Parse(item.Cells[4].Value.ToString());
        intSumTax += Int64.Parse(item.Cells[5].Value.ToString());
        intSumPay += Int64.Parse(item.Cells[6].Value.ToString());
    }
    else
    {
        item.DefaultCellStyle.BackColor = System.Drawing.Color.Empty;
    }
}
DGDoc.EndEdit();

答案 5 :(得分:0)

1-创建新按钮。

2-您可以在单击checkAll按钮

时使用以下代码

3-单击按钮时,它将选中datagridview中的所有复选框,再次单击时,将取消选中所有复选框。

private void btncheckall_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dgvResult.Rows)
            {
                row.Cells[0].Value = row.Cells[0].Value == null ? false : !(bool)row.Cells[0].Value;
            }
        }

注意:在某些情况下,您必须先在datagridview中单击,然后单击按钮。

答案 6 :(得分:0)

您可以像这样检查所有单元格:

private void CheckAllCheckboxItemsOnDataGridView(int columnIndex)
{ 
    foreach (DataGridViewRow row in dgFiles.Rows)
    {
        DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)row.Cells[columnIndex];

        cell.Value = !(cell.Value == null ? false : (bool)cell.Value); 
    }
}

您可以像这样在CheckedChanged事件中使用方法:

private void chkItems_CheckedChanged(object sender, EventArgs e)
{
    CheckAllCheckboxItemsOnDataGridView(columnIndex: 0);
}