• 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

  • 相关阅读:
    SpringCloud与SpringBoot区别
    Spring cloud概念
    微服务框架对比
    期末作品检查
    管理信息系统 第三部分 作业
    作业38——模型分离(选做)
    作业37——密码保护
    作业36——实现搜索功能
    作业35——完成个人中心—导航标签
    作业34——个人中心标签页导航
  • 原文地址:https://www.cnblogs.com/fps2tao/p/16415992.html
Copyright © 2020-2023  润新知