在我的datagridview的第一列中,我有复选框,我想在每次更改复选框的状态时触发事件。我想过使用cellcontentclick事件,将sender对象强制转换为datagridviewcell并按列索引进行检查。但我发现sender对象是一个datagridview对象。那么,如何执行所需的操作呢?
答案 0 :(得分:1)
有很多方法
一种方法是:
您可以在页面上hidden field
或viewstate
,在点击javascript时可以存储行ID,然后在代码后面获取该隐藏字段值。
其他人:
您可以使用CommandName
& CommandArgument
并在代码后面使用datagridview_ItemCommand
答案 1 :(得分: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
}
}
}
希望这会有所帮助:)
答案 2 :(得分: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);
}
}