• c# Winform DataGridView 当前单元格失去焦点的有关问题


    在一个DataGridview中的某一个单元格输入了内容,点击窗体上的Button按钮(输入的光标还在那个输入的单元格中,没有失去焦点),获取到的那个单元格的值不是刚才输入的值,还是输入前的值,现将解决方法整理如下:

    在DataGridView的EditingControlShowing事件中:

            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)
            {
                if (this.dataGridView.CurrentCell.ColumnIndex == 9)
                {
                    this.dataGridView.CurrentCell.Value = (sender as TextBox).Text;
                }
            }

    这样就解决了上述问题

    --------------------------------------

    还有一个问题,就是如果在编辑单元格时,如果单元格内容没有变化,就不进行提交保存,(怎么知道单元格的内容是否有变化)

    那只有在入焦点的时候记录一下单元格之前的值,然后在马上提交保存的函数中获取值再做一个对比。

    如:

    第一步:在DataGridView控件的majorDataGrid_EditingControlShowing事件中给单元格绑定Enter和Leave 事件

    private void majorDataGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    
            {
                if (e.Control.GetType().Equals(typeof(DataGridViewTextBoxEditingControl)))//cell为类TextBox时
                {
                    e.CellStyle.BackColor = Color.FromName("window");
                    DataGridViewTextBoxEditingControl editingControl = e.Control as DataGridViewTextBoxEditingControl;
                    editingControl.Leave += new EventHandler(editingControl_TextChanged);
                    editingControl.Enter += new EventHandler(editingControl_Enter); 
                }
            }

    第二步:当textConrol获取焦点的时候记录单元格的值

            private void editingControl_Enter(object sender, EventArgs e)
            {
                TextBox t = (TextBox)sender;
                preTextContent = t.Text;
            }

    第三步:当光标离开单元格的时候比较进入和离开时单元格的值有没有发生变化,如果值发生变化说明发生了修改,此时利用该行的Tag属性来标注单元格已被修改

            private void editingControl_TextChanged(object sender, EventArgs e)
            {
                TextBox t = (TextBox)sender;
                editTextContent = t.Text;
                if (editTextContent != preTextContent)
                {
                    majorDataGrid.Rows[majorDataGrid.CurrentCell.RowIndex].Tag = Constant.UPDATED;
                }
            }

    转 : https://blog.csdn.net/esunshine1985/article/details/53938991

    https://blog.csdn.net/guoguo19811025/article/details/40896727

  • 相关阅读:
    链表操作二——中间结点的删除等
    stack vector queue 等的实现方式<<0922
    任何和日期相关的函数都在这里<<0922
    类函数返回该类的问题<<0922
    Android学习笔记之PullToRefreshListView和BaseAdapter的使用
    记录Android学习过程中遇到的问题
    ruby appium 准备环境
    os x升级到10.10后appium不能测试通过的解决办法
    appium 在ios模拟器上面成功运行
    appium IOS真机测试
  • 原文地址:https://www.cnblogs.com/fps2tao/p/16415992.html
Copyright © 2020-2023  润新知