在我的 datagridview 的第一列中,我有复选框,并且我想在每次更改复选框的状态时触发一个事件。我想过使用 cellcontentclick 事件,将 sender 对象转换为 datagridviewcell 并通过其列索引进行检查。但是我发现 sender 对象是一个 datagridview 对象。那么,如何执行所需的操作呢?
问问题
3946 次
3 回答
1
要处理CheckBoxCell
更改的值,您必须使用此事件CellValueChanged
。事件中的发送者将始终是引发事件的控件。要获得有关发生的事情的更多信息,您需要查看EventArgs
.
回到处理CheckBoxCell
这样做:
private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
var dgv = sender as DataGridView;
var check = dgv[e.ColumnIndex, e.RowIndex].Value as bool?;
if (check.HasValue)
{
if (check)
{
//checked
}
else
{
//unchecked
}
}
}
希望这可以帮助 :)
于 2013-02-07T09:26:45.753 回答
1
有很多方法
一种方法是:
您可以使用一个hidden field
或viewstate
在页面上,当点击由 javascript 发生时,您可以在其中存储行 ID,然后在后面的代码中获取该隐藏字段值。
另一种:
你可以 在代码后面使用CommandName
& 和CommandArgument
datagridview_ItemCommand
于 2013-02-07T09:23:48.633 回答
0
private void dgvStandingOrder_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (dgvStandingOrder.Columns[e.ColumnIndex].Name == "IsSelected" && dgvStandingOrder.CurrentCell is DataGridViewCheckBoxCell)
{
bool isChecked = (bool)dgvStandingOrder[e.ColumnIndex, e.RowIndex].EditedFormattedValue;
if (isChecked == false)
{
dgvStandingOrder.Rows[e.RowIndex].Cells["Status"].Value = "";
}
dgvStandingOrder.EndEdit();
}
}
private void dgvStandingOrder_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
dgvStandingOrder.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dgvStandingOrder_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dgvStandingOrder.CurrentCell is DataGridViewCheckBoxCell)
{
dgvStandingOrder.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
于 2013-02-07T09:48:00.300 回答