1

在我的 datagridview 的第一列中,我有复选框,并且我想在每次更改复选框的状态时触发一个事件。我想过使用 cellcontentclick 事件,将 sender 对象转换为 datagridviewcell 并通过其列索引进行检查。但是我发现 sender 对象是一个 datagridview 对象。那么,如何执行所需的操作呢?

4

3 回答 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 fieldviewstate在页面上,当点击由 javascript 发生时,您可以在其中存储行 ID,然后在后面的代码中获取该隐藏字段值。

另一种:
你可以 在代码后面使用CommandName & 和CommandArgumentdatagridview_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 回答