DataGridView中的DataGridViewComboBoxColumn 讓其值改變聯動


在工作中自己也遇到過這類問題, 最近也有很多人問我這個問題, 就此機會寫出來記錄一下.

 

首先,顧名思義,值改變事件我們會想到 dataGridView1_CellValueChanged 這個事件,想必看名字都知道.具體代碼如下.

   private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.Columns[e.ColumnIndex].Name == "City")
            {
                DataGridViewComboBoxCell comboxCell =(DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells["City"];
                DataGridViewTextBoxCell textbox =(DataGridViewTextBoxCell)dataGridView1.Rows[e.RowIndex].Cells["城市"];
                textbox.Value = comboxCell.Value.ToString();
                dataGridView1.Invalidate();
            }
        }

如上代碼只是個演示,至於判斷當前列內容是否為空之類的一些條件篩選自己加.

至此.運行之后我們會發現.當我們選擇 DataGridViewComboBoxCell 這一列中值的時候,並沒有立即聯動改變所需要改變列的值.而是我們去點擊那一列的時候或者點擊別的行之后才會變. 這樣是不是會有點不太好呢.所以還需要寫到一個事件.如下代碼。

 

我們還需要觸發dataGridView1的CurrentCellDirtyStateChanged事件,並且在事件中調用DataGridView.CommitEdit 方法。

[關於CommitEdit MSDN解釋如下:將當前單元格中的更改提交到數據緩存,但不結束編輯模式。 ]

這樣我們關心的那個事件CellValueChanged就能夠被順利觸發了。示例代碼如下。

 

 private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            if (dataGridView1.IsCurrentCellDirty)
            {
                dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
            }
        }

 

 

 

  

至此。本博文的內容介紹完畢。因為平時工作忙,很少寫博文,看到網上有些問題也並不全面。所以記錄下平時工作中所遇到的問題。與大家共同進步。

看了之前寫過的博文也有不少瀏覽量,有些還是很少.也許是關鍵字的原因難以搜索到或者很少有人遇到我這樣的問題吧.

最主要還是本人的博文水平有限,並不是很了解這塊。望大家見諒。望看到的朋友們在底下給個回復。互動一下。謝謝了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM