7

这是场景。

我有checkbox(Name:"Check All" 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;
        }
    }
}   
4

7 回答 7

16
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
}
于 2012-11-06T01:00:34.937 回答
3
    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;
        }
    }

我就是这样做的

于 2016-09-29T03:40:39.123 回答
1

试试这个

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

}
于 2017-06-28T01:20:30.943 回答
0

如果您可以自行提供默认状态,checkboxes of datagridview即 True 或 False [不要分配空状态] 状态(这样做的原因将在后面解释)。

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

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

其中DataGridView[0, i]表示第 0 列第 i 行
这样做的原因是,加载时复选框默认处于null状态。代码没有比较null状态(创建对象空引用异常)。所以,一旦你为它分配一个状态,要么是 false 要么是 true 。它永远无法进入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;
    }
}

它对我有用,我希望它对你有用。

于 2013-02-28T10:03:15.153 回答
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();
于 2015-12-11T21:41:35.953 回答
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,然后单击按钮。

于 2020-03-18T18:06:02.780 回答
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);
}
于 2020-05-23T16:56:40.417 回答