如何在DataGridView中使用2个复选框进行删除或编辑

本文关键字:复选框 删除 编辑 2个 DataGridView | 更新日期: 2023-09-27 18:18:51

我正在显示DataGridView对象中的数据。第一列表示删除,第二列作为复选框进行编辑,其余的是数据。

当其中一个复选框被选中时,我要做的是对所选数据进行删除和编辑。

当一个复选框被选中时,我卡住了如何做一些事情,基本上是如何检查哪个字段被点击。

我该怎么做?

我有这个取消之前选中的任何其他字段:

public MainWindow()
{
    InitializeComponent();
    dgvPC.CellContentClick += new DataGridViewCellEventHandler(ContentClick_CellContentClick);
}
void ContentClick_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    foreach (DataGridViewRow row in dgvPC.Rows)
    {
        row.Cells[Delete1.Name].Value = false;
        row.Cells[Edit1.Name].Value = false;
    }
}

我添加的数据如下:

if (security.DecryptAES(read.GetString(1), storedAuth.Password, storedAuth.UserName) == "PC Password")
{
    // Count PC passwords.
    countPC++;
    dgvPC.Rows.Add(read.GetInt32(0), false, false, 
        security.DecryptAES(read.GetString(5), storedAuth.Password, storedAuth.UserName), 
        security.DecryptAES(read.GetString(6), storedAuth.Password, storedAuth.UserName));
}

如何在DataGridView中使用2个复选框进行删除或编辑

从您的陈述中我推断您无法确定正在考虑哪个复选框

所以要缩小范围,你应该尝试使用网格的CellValueChanged事件

void grd_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
     if ((sender as DataGridView).CurrentCell is DataGridViewCheckBoxCell)
     {
          //Now you know its a checkbox
          //use the ColumnIndex of the CurrentCell and you would know which is the column
          // check the state by casting the value of the cell as boolean
     }
}

如果您希望动作是立即的,那么您将不得不提交值,这发生在焦点移出单元格时。尝试处理网格的CurrentCellDirtyStateChanged

像这样的东西应该为你工作

void grd_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (grd.IsCurrentCellDirty)
    {
        grd.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}