客户要求在datagrid的指定位置插入一行,我用dataTable.Rows.InsertAt(dataRow,Index)插入后,在dataTable中查看,dataRow确实是插入在了指定位置,但是在绑定的dataGrid中却仍然是显示在最后一行。有人说,插入后,用dataTable.AcceptChanges()一下就可以了。这个确实是可以在指定行显示了。但是我插入的是空行,AcceptChanges以后,新插入的行dataRow的状态就变成了Unchanged了,这时候如果再用dataAdapter.Update(dataTable)向数据库提交更新就会出错。 不知道那位高人有好的解决方法,不胜感激啊!

解决方案 »

  1.   

    if(m_dataTable!=null && m_dataTable.GetChanges() != null && m_dataTable.GetChanges().Rows.Count > 0)
    {//判断分类是否改动过
        dataAdapter.Update(m_dataTable);
    }
      

  2.   

    fengjun19912(东京大屠杀),您能稍微解释一下您的代码吗?我不是很明白
      

  3.   

    to kokubo_wing(翅膀),我的是在winform下的,就是先插入一个空行,然后在空行里填入数据,再向数据库提交更新
      

  4.   

    to xxqq0824(赛跑),我试了一下,向dataTable中插入一行之后,我先取消绑定,再重新绑定数据源,新插入的行还是显示在最后。我猜测,可能是datagrid的内部实现机制就是先显示RowState=Unchanged的行,然后再在后边显示RowState=Added的行。但是如果允许对datagrid重新排序的话,重新排序之后,新插入的行就不会显示在最后了。这个地方我搞不懂