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();
这样也没任何效果。哪位高手指点一下是什么原因,感激不尽!
另:使用编辑的方式如何让一个单元格进入编辑状态和退出编辑状态?

解决方案 »

  1.   

    哈哈, 我也一直在找这个, 还没办法解决有一个变通的办法是让另一个控件获得焦点otherControl.Focus();
      

  2.   

    我刚才测试了你说的问题测试代码如下
    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出来我试下
      

  3.   

    关于编辑和退出状态,如果你要完美实现就需要重写datagridview控件
    简单点的方法是聚焦需要编辑的单元格以后用sendkey类模拟按键"F2"是编辑  "ESC"是退出编辑
      

  4.   

    this.dgvPOLine.CurrentCell =null 
      

  5.   

    demo我已放在了网络硬盘,地址:
    http://www.mediafire.com/?sharekey=8f6bed8722e9a981d2db6fb9a8902bda
      

  6.   

    demo说明:第1列输入字符,会赋与同行第2,3列,然后焦点转到同行第4列,此时第4列单元格为选定状态。
    通过按F2或者鼠标单击第2列,则弹出Form2,单击Form2上的按钮,则给Form1上dgv的当前行的第1,2,3例赋值,然后焦点转到同行第4列,再关闭Form2,此时当前行第4列单元格是编辑状态。
      

  7.   

    加入下面这句就行了 
    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;
                }
            }
      

  8.   


    非常感谢!我刚才试了在关闭Form2之前执行
    endKeys.Send("{ESCAPE}");
    这样也达到了
    e.Cancel = true;
    同样的效果。再次感谢!只是很奇怪EndEdit()居然无效???
      

  9.   

    何必那么麻烦,将CurrentCell设为null就可以了。