收录日期:2020/11/26 23:10:48 时间:2016/07/06 09:02:45 标签:C#
Form1有一个DGV,并有赋值语句如下:

                    this.dgvPOLine[1, currentcellrow].Value = GoodsInfo_DR["Goods_Name"].ToString();
                    this.dgvPOLine[2, currentcellrow].Value = GoodsInfo_DR["Goods_Param"].ToString();
                    this.dgvPOLine.CurrentCell = this.dgvPOLine[4, currentcellrow];


Form2是Form1的从窗口
也有向Form1的DGV赋值的语句:

                main.dgvPOLine[0, currentcellrow].Value = Query_Goods_DR["Goods_Barcode"].ToString();
                main.dgvPOLine[1, currentcellrow].Value = Query_Goods_DR["Goods_Name"].ToString();
                main.dgvPOLine[2, currentcellrow].Value = Query_Goods_DR["Goods_Param"].ToString();
                main.dgvPOLine.CurrentCell = main.dgvPOLine[4, currentcellrow];
                this.Close();


但是相当奇怪的是,Form1里当焦点定位第4列时,这个单元格是选定状态。
而Form2赋完值返回到Form1后,焦点定位在第4列的单元格是编辑状态的,我在Form2返回Form1之前使用:
main.dgvPOLine.EndEdit();

这样也没任何效果。

哪位高手指点一下是什么原因,感激不尽!
另:使用编辑的方式如何让一个单元格进入编辑状态和退出编辑状态?
哈哈, 我也一直在找这个, 还没办法解决

有一个变通的办法是让另一个控件获得焦点

otherControl.Focus();
我刚才测试了你说的问题测试代码如下
from1中:
  private void button1_Click(object sender, EventArgs e)
        {
            this.dataGridView1.CurrentCell = dataGridView1[1, 0];
            Form2 fm = new Form2((DataTable)this.dataGridView1.DataSource,this);
            fm.ShowDialog();
            return;


form2中

  private void button1_Click(object sender, EventArgs e)
        {
            main.dataGridView1[0, 0].Value = "123";
            main.dataGridView1[0, 1].Value = "123";
           
            main.dataGridView1.CurrentCell = main.dataGridView1[0, 2];
            this.Close();
        }

由form2控制form1中的单元格值后设置当前值最后关闭返回form1没有出现当前单元格编辑的现象
你发一个这种情况的详细demo出来我试下
关于编辑和退出状态,如果你要完美实现就需要重写datagridview控件
简单点的方法是聚焦需要编辑的单元格以后用sendkey类模拟按键"F2"是编辑  "ESC"是退出编辑
期待解决!
学习了。正在找这些资料。
this.dgvPOLine.CurrentCell =null 
demo我已放在了网络硬盘,地址:
http://www.mediafire.com/?sharekey=8f6bed8722e9a981d2db6fb9a8902bda
demo说明:

第1列输入字符,会赋与同行第2,3列,然后焦点转到同行第4列,此时第4列单元格为选定状态。
通过按F2或者鼠标单击第2列,则弹出Form2,单击Form2上的按钮,则给Form1上dgv的当前行的第1,2,3例赋值,然后焦点转到同行第4列,再关闭Form2,此时当前行第4列单元格是编辑状态。
加入下面这句就行了 
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            int currentcellcolumn = this.dataGridView1.CurrentCell.ColumnIndex;
            if (currentcellcolumn == 1)
            {
                Form2 frm = new Form2(this);
                frm.ShowDialog();
                e.Cancel = true;
            }
        }
引用 9 楼 atlasroben 的回复:
加入下面这句就行了 
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) 
        { 
            int currentcellcolumn = this.dataGridView1.CurrentCell.ColumnIndex; 
            if (currentcellcolumn == 1) 
            { 
                Form2 frm = new Form2(this); 
                frm.ShowDialog(); 
                e.Cancel = true; 
            } …


非常感谢!

我刚才试了在关闭Form2之前执行
endKeys.Send("{ESCAPE}");
这样也达到了
e.Cancel = true;
同样的效果。

再次感谢!

只是很奇怪EndEdit()居然无效???
何必那么麻烦,将CurrentCell设为null就可以了。

用伊泰克2001ADSL猫路由上网,不能上QQ和MSN的问题 comdl32.ocx控件过期。这个控件在我的应用程序中已经包含了。各位给看看 求教,wap下怎么播放流媒体??请做过的进来说说!谢谢大家! 什么时候CSDN可以用 telnet登陆啊,www感觉不方便 偶写的C#,爱看不看1。 有没有swing的编辑控件支持高亮显示功能 [ASP.NET中如何动态生成模板列? 急.......] 高分求救错误:客户端发现响应内容类型为“text/html”,但应该是“text/xml”。 请在广东工作的人帮忙,或者其他省市都可以啊,分最后才加:-) 怎样用代码生成一个TImage对象,并显示图片? WIN2000系统,只要一执行搜索,系统就重启,为什么? 怎么样用一个WinForm去操作一个WebService? FYI: Using password in the PalmOS system. 大家一起来做一个设计 aspnetmenu控件能否做到根据权限来显示菜单? 真诚问一个问题, 新谈了一个女朋友,拥抱时她总会颤抖,发冷(以前没和男孩子拥抱过),不知大家碰到没? 串口通讯协议的分析问题,希望高手指点迷津) 考考大家的文采,用五个关键词写一篇时事简评。 一个form里有2个提交按钮,判别是哪个按钮提交的 有没有高手从事过Doja开发,Doja不支持Socket通讯,如何解决? 各位兄弟 怎么实现 一个数据在表中的那行??谢谢 关于动态增加与动态删除页面元素的问题 函数重载是静态连编,还是动态? 关于msflexgrid的选择问题 请问我在2000安装摄像头的时候出现一个问题 DataGrid使用时遇到的问题 本人想在深圳找份工作,希望大家提个意见 关于ORACLE版本的问题。 上亿条记录,表的设计问题,请教!!!!! 在JS里的函数能返回字符吗,以单击按纽时获得这个字符;