2013-02-07 34 views
1

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

+0

这是的WinForms,WPF或Asp.net –

+0

你是如何将数据绑定到你的'DataGridView' ? 'bindingSource','DataTable'或Unbound数据? – spajce

回答

1

有许多方法

一种方法是:
你可以采取在其中可以储存行ID,当点击由JavaScript发生,然后在后面的代码获取hiddenfield值页面上hidden fieldviewstate

其他一个:
您可以使用CommandName & CommandArgument和使用datagridview_ItemCommand

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 
     } 
    } 
} 

希望这有助于:)

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); 
       } 
      } 
相关问题