我用dataTable绑定的datagridview,在添加一行数据的时候,我首先添加一个空行,在将数据填入空行,填好后光标还是停留在新添加的行的单元格中,马上点击保存,为什么读取不到新添加的行中当前光标停留的那一个单元格的数据?
比如;新添加的行6个单元格数据是 1 2 3 4 5 6 这6个字段,点击保存之前,光标是停留在最后输入的单元格中,如6,然后点添加,却只能够得到 1 2 3 4 5 却得不到6 这是为什么呢,修改的时候也是这样,如果添加或修改好了,把鼠标在另外一个地方点击一下,使焦点换个地方,那又就可以了,我就郁闷了!

解决方案 »

  1.   

    点添加时用dataGridView1.EndEdit();
      

  2.   

    我记得好像有个endedit方法,具体不太记得了。用这个方法可以结束编辑,保存的时候就可以保存了。
      

  3.   

    就是这样的,当你的光标还停留在当前编辑的那个单元格内的时候它的数据是不会刷新,也就是提交的。。
    你可以试试 dataGridView1.Refresh();
      

  4.   

    1楼的那位大哥,我点保存的时候加了这个方法,还是没用啊,
    this.gvShow.EndEdit();
    SetupManager.UpdateDtv(dt);
    FillGridView();其中 dt 是 gvShow绑定的 datatable,只是一张表的数据,使用CommandBuilder更新的,
    FillGridView() 是重新查询绑定显示数据。Refresh()也没用
      

  5.   

    单击添加按钮时加上这句:
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
      

  6.   

    绑定到DATATABLE中了, 可是, DATATABLE的更新会影响到数据库吗?
      

  7.   

    gvShow.CommitEdit(DataGridViewDataErrorContexts.Commit);  用这句也没效果啊,
    SetupManager.UpdateDtv(dt); 
    FillGridView(); 其中 dt 是 gvShow绑定的 datatable,只是一张表的数据,使用CommandBuilder更新的, 
    FillGridView() 是重新查询绑定显示数据。 
      

  8.   

    看问题迟迟不能解决,而我也踩了这个帖子,就帮下忙吧。因为基本不用那个功能缺乏的datagridview,所以不清楚楼主的更新方法,你所给的代码也只不过是最后更新数据库的那部分,你的dt,也就是DataTable的内容是如何更新的,那个才是关键。看了下datagridview可用的事件中,最合适的就是CellEndEdit事件了,你应该在那个事件中执行对dt内容的更新,但要记住,该事件的执行是需要时间的,你按下了保存按钮,执行数据的最终保存必须要等待那个事件执行完毕才行。可以使用一个全局的bool型变量加判断控制或者使用AutoResetEvent类来等待CellEndEdit事件的完成。