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