ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-06-27 14:35:02  阅读:382  来源: 互联网

标签:sender c# void 单元格 private DataGridView editingControl TextBox


在一个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

 

标签:sender,c#,void,单元格,private,DataGridView,editingControl,TextBox
来源: https://www.cnblogs.com/fps2tao/p/16415992.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有