如何使用DataGridView中的2个复选框删除或编辑?

时间:2011-12-28 07:30:29

标签: c# datagridview checkbox

我在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));
}

1 个答案:

答案 0 :(得分:1)

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

因此,要缩小范围,您应尝试使用网格的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);
    }
}