簡體   English   中英

當用戶更改單元格值時捕獲的 DataGridView 事件

[英]DataGridView Event to Catch When Cell Value Has Been Changed by User

我有一個用 C# 編寫的 Winforms 應用程序。

在我的一個 DataGridViews 中,除了名為“Reference”的列之外,我已將所有列設置為 ReadOnly = true;

我希望應用程序知道用戶何時更改了“參考”列中的任何內容,但到目前為止我嘗試過的所有事件都比用戶進行更改時觸發的事件多得多。 例如 CurrentCellChanged 在 DataGridView 最初呈現時觸發,並且每次用戶只需單擊或沿行單擊選項卡等。

我只對捕獲用戶對“參考”列中數據的更改感興趣,該列是唯一的列,其中 ReadOnly = false;

哪個事件最適合用於此?

CellValueChanged正是您所需要的:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e){
  if(dataGridView1.Columns[e.ColumnIndex].Name == "Reference"){
    //your code goes here
  }
}

我認為事件CellEndEdit也適合您的需求:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e){
  if(dataGridView1.Columns[e.ColumnIndex].Name == "Reference"){
    //your code goes here
  }
}

在我的情況下,在 DGV 初始化時 CellValueChanged 事件也被觸發,所以我想使用 CellEndEdit,正如 King King 在他的回答中提到的那樣。

為了使King King的第二個答案更加防彈(請參閱JPProgrammer的評論),即僅反應,如果在單元格中輸入了值,您可以執行以下操作:

   private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
   {
        int? rowIdx = e?.RowIndex;
        int? colIdx = e?.ColumnIndex;
        if (rowIdx.HasValue && colIdx.HasValue)
        {
            var dgv = (DataGridView)sender;
            var cell = dgv?.Rows?[rowIdx.Value]?.Cells?[colIdx.Value]?.Value;
            if (!string.IsNullOrEmpty(cell?.ToString()))
            {
                // your code goes here
            };
        };
   }

注意使用?.的空處理?. ?[運算符。 我已經寫了它,以便它可以以更通用的方式使用,但是當然您可以添加對“參考”列的檢查,只需將上面的內部if語句替換為以下內容:

       if (dgv.Columns[colIdx.Value].Name == "Reference")
       {
          if (!string.IsNullOrEmpty(cell?.ToString()))
          {
               // your code goes here
          };
       };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM