以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  当我在某表格插入一行时,提示:DATATABLE内部索引已损坏“5”。请问如何解决?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=73757)

--  作者:jinzhengbe
--  发布时间:2015/8/26 0:45:00
--  当我在某表格插入一行时,提示:DATATABLE内部索引已损坏“5”。请问如何解决?


 

微信菜单,输入客户名 点添加 的时候就会 出现这个,提示

 

还有串货那个菜单,也会出,请问该怎么解决, 麻烦各位多指点下 

 

就差这个收尾了 谢谢!!!

 

 

本来以为是系统不兼容的问题 ,后来换了系统 发现问题还在, 所以可以排除系统 问题了

[此贴子已经被作者于2015/8/26 13:45:19编辑过]

--  作者:jinzhengbe
--  发布时间:2015/8/26 0:46:00
--  

感觉应该是这个原因 ,但是不会处理,请各位指点!!!

 

一般我们会使用DataTable.Select()方法来筛选数据,而DataTable会在执行Select()方法的时候系统会默认创建一个DataView,而DataView创建的时候会创建内部索引,如果这个时候数据被操作(添加,删除),那么内部索引就会被破坏,从而出错。大概是这个意思吧,不知道有没有说错。所以解决的方法也很简单,就是新建一个DataView,并在创建DataView的时候锁定DataTable。
DataView myDV;
lock(myTable)
{
    myDV=new DataView(myTable,"过滤","排序",DataViewRowState.CurrentRows);

    //数据操作
}


--  作者:大红袍
--  发布时间:2015/8/26 9:55:00
--  

测试了一下,你要把 BeforeSelChange 的代码删除,也就是

 

If e.OldRange.RowSel <> e.NewRange.RowSel \'如果选择的是不同的行
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then \'而且原来选择的是一个有效的数据行
        Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) \'获得原来选择的行
        r.Save() \'保存之
    End If
End If

如果要保存,你可以在DataRowAdding事件写

 

e.DataTable.Save


--  作者:jinzhengbe
--  发布时间:2015/8/26 13:04:00
--  

太感谢了!!!! 已经解决了~~~