none
winform datagridview 单元格编辑问题 RRS feed

  • 问题

  • 很奇怪的一个问题:winform下;datagridview(gvProduct)控件;

    有gvProduct_CellEndEdit与gvProduct_CellBeginEdit事件;

    两个事件里设置了断点;另一个datagridview控件(gvInner),结束第一个单元格时;

    private void gvProduct_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)

    {

     .........................(代码省略C处)有断点

    }

     private void gvProduct_CellEndEdit(object sender, DataGridViewCellEventArgs e)
     {

    .................( 代码省略A处)有断点

     switch (e.ColumnIndex)
                {
                    case 1:
                      this.gvInner.Visible = false;//有断点(B处)

                      ....

                    break;

                   .....................

                  }

    .................

    }

    问题是;当结束单元格时;A,B处都可以获取断点;但运行到B处时(没有执行B处代码),代码会执行到C处(为什么???),执行完之后,继续执行B处没有执行完的代码(好像C处是VS自动添加的代码);我想知道为什么会自动执行C处代码?

    如果我把B处的代码(  this.gvInner.Visible = false)注释,那么就不会执行C处的代码了;这是正常的;

    我查看了gvInner所有的代码;没有什么特别的啊;为什么  this.gvInner.Visible = false会影响C处代码的执行呢?


    大其心,可容天下之物; 虚其心,可受天下之善;



    • 已编辑 lfofiug 2012年5月4日 3:16
    2012年5月4日 3:11

答案

  • 如果单看你提供的代码,从B之前跳转到C处,没有任何道理可言。

    我测试了下面的代码,并没有看到你所描述的现象。

            private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
            {
                int i = 0;
            }
    
            private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                switch(e.ColumnIndex)
                {
                    case 0:
                      this.dataGridView2.Visible = false; 
                        break;
                    case 1:
                        this.dataGridView2.Visible = true;
                       break;
                     default:
                        break;
                }
            }

    猜测,可能是其他你并没有提供的代码影响了代码的执行。

    好像C处是VS自动添加的代码” 这个地方是什么意思呢?如果你不需要对CellBeginEdit事件进行处理,可以把这段代码删除。记得在Designer.cs里面把进行该事件注册的代码也删除。

    2012年5月4日 8:26