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); } }
至此。本博文的内容介绍完毕。因为平时工作忙,很少写博文,看到网上有些问题也并不全面。所以记录下平时工作中所遇到的问题。与大家共同进步。
看了之前写过的博文也有不少浏览量,有些还是很少.也许是关键字的原因难以搜索到或者很少有人遇到我这样的问题吧.
最主要还是本人的博文水平有限,并不是很了解这块。望大家见谅。望看到的朋友们在底下给个回复。互动一下。谢谢了。