zoukankan      html  css  js  c++  java
  • C#——DataGridView控件填写数据事件

    对于DataGridView控件,与单元格内容相关的有以下这几个事件:

    <span style="font-size:18px;">// 当单元格内容改变并且提交之后发生(提交一般是单元格在编辑完之后失去焦点)
    private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        
    }
     
    // 当单元格进入编辑状态时发生
    private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {
        
    }
     
    // 在单元格的状态相对于其内容的更改而更改时发生。
    private void dataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
        
    }
     
    // 在单元格完成编辑时发生
    private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
     
    }</span>

    但是以上这几个事件都不能实现每次向单元格输入新的内容时发生。举个例子,我单击一个单元格,则单元格进入编辑状态,CellBeginEdit事件发生,然后我输入1,2……乃至更多的东西,上述的事件也不会发生。另外Key*系列的事件也试过,也没反应。

    如果要像TextBox那样,每输入一个字符就发生一次的事件怎么办呢?可以用以下方法。原来dataGridView控件的单元格只是个容器,他可以容纳其他的控件,最一般的就是一个文本框。EditingControlShowing事件比上述事件还要早发生,他是dataGridView控件为了使用户可以编辑,而加载一个TextBox(如果单元格时复选框,是其他的控件,那么就加载对应的控件),加载TextBox时这个事件发生,可以在时间参数中获取这个TextBox的引用,动态注册一个事件即可。

    <span style="font-size:18px;">// 当dataGridView控件加载一个子控件用于编辑时发生。
    private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        TextBox EditingTB = e.Control as TextBox; // 获取编辑用的文本框的引用
        EditingTB.TextChanged += EditingTB_TextChanged; // 动态注册事件
    }
     
    // 当子控件的内容更改时发生
    private void EditingTB_TextChanged(object sender, EventArgs e)
    {
        String nowstr = (sender as TextBox).Text;
    }</span>

    要注意一点,这里的EditingTB应该保存下来,然后在CellEndEdit事件中注销事件。

  • 相关阅读:
    POJ-1318(list.sort()输出不为字典序,map才是按字典序排列)
    C++ 进阶
    命令模式在MVC框架中的应用
    使用NoSQL Manager for MongoDBclient连接mongodb
    第一部分 学习函数式思维
    【剑指offer】复杂链表的复制
    Hadoop-2.4.0分布式安装手冊
    Impala中多列转为一行
    js(jquery)绑定点击事件
    hdu1243 最长公共子序列(LCS)
  • 原文地址:https://www.cnblogs.com/eve612/p/14341770.html
Copyright © 2011-2022 走看看