• 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);
                }
            }

      

    至此。本博文的内容介绍完毕。因为平时工作忙,很少写博文,看到网上有些问题也并不全面。所以记录下平时工作中所遇到的问题。与大家共同进步。

    看了之前写过的博文也有不少浏览量,有些还是很少.也许是关键字的原因难以搜索到或者很少有人遇到我这样的问题吧.

    最主要还是本人的博文水平有限,并不是很了解这块。望大家见谅。望看到的朋友们在底下给个回复。互动一下。谢谢了。

  • 相关阅读:
    转:fork和vfork的区别(待细看)
    转:步步LINUX C--进程间通信(二)信号
    转:fork与vfork的区别
    转:Linux fork与vfork的深入分析
    转:函数指针,函数指针数组,函数指针数组的指针
    转:Linux--进程间通信(信号量,共享内存)
    转:fork()子进程创建
    侯老师的话(Application Framework)
    如何在其他类中实现继承自CFormView类的对象
    如何在MFC对话框之间自定义消息传递
  • 原文地址:https://www.cnblogs.com/ws1996/p/6727703.html
Copyright © 2020-2023  润新知