2013-02-07 35 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); 
       } 
      } 
相關問題