Foxtable(狐表)用户栏目专家坐堂 → 小技巧,重置_SortKey列的方法


  共有7588人关注过本帖树形打印复制链接

主题:小技巧,重置_SortKey列的方法

帅哥,在线噢!
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
小技巧,重置_SortKey列的方法  发帖心情 Post By:2013/3/4 14:43:00 [只看该作者]

我们知道,通过常规的代码, 我们是没有办法修改_Identify、_SortKey等系统列的内容。
例如某个表启用了插入行的功能,如果在某位置插入了太多的行,最后该位置可能再也无法正常插入行,我们可以用下面的代码,重置_SortKey列的内容:

 

Dim drs As List(of DataRow) = DataTables("A").Select("","[_SortKey]")
For
i As Integer = 0 To drs.Count - 1
   
drs(i).BaseRow("_SortKey") = i
Next

 

执行上述代码后,插入行的功能即可恢复正常。

 

提示:

 

DataRow有一个BaseRow属性,返回底层的System.Data.Row对象。

[此贴子已经被作者于2013-3-4 14:45:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2013/3/4 15:01:00 [只看该作者]

For i As Integer = 0 To drs.Count - 1
    drs(i)("_SortKey") = i
Next

 

昨天我没调用baserow属性,直接上述代码修改的,不过没发现异常,不知这样做有没有弊端?


 回到顶部
帅哥,在线噢!
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/3/4 15:02:00 [只看该作者]

你这样修改不了,值并不会改变,你可以测试一下


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2013/3/4 15:15:00 [只看该作者]

的确是没变化,呵呵,还以为没报错就是OK了图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
FoxMan
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:302 积分:1860 威望:0 精华:0 注册:2012/4/27 11:34:00
  发帖心情 Post By:2013/3/4 15:21:00 [只看该作者]

以下是引用狐狸爸爸在2013-3-4 14:43:00的发言:

我们知道,通过常规的代码, 我们是没有办法修改_Identify、_SortKey等系统列的内容。
例如某个表启用了插入行的功能,如果在某位置插入了太多的行,最后该位置可能再也无法正常插入行,我们可以用下面的代码,重置_SortKey列的内容:

 

Dim drs As List(of DataRow) = DataTables("A").Select("","[_SortKey]")
For
i As Integer = 0 To drs.Count - 1
   
drs(i).BaseRow("_SortKey") = i
Next

 

执行上述代码后,插入行的功能即可恢复正常。

 

提示:

 

DataRow有一个BaseRow属性,返回底层的System.Data.Row对象。

[此贴子已经被作者于2013-3-4 14:45:39编辑过]

何不无法正常插入行時,讓程序自動處理!




 回到顶部
帅哥哟,离线,有人找我吗?
surgeme
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:5 积分:162 威望:0 精华:0 注册:2014/3/6 10:31:00
  发帖心情 Post By:2014/7/13 1:06:00 [只看该作者]

我一直都在找怎么把排序结果保存下来的办法,但试过你们写的这个代码,发现根本就重置不了"_sortkey"!
最终发现要像下面这样才行,你们对比一下别人写的有什么差别吧!

Dim cnt As Integer
For Each dr As DataRow In DataTables("表A").Select("","_SortKey")
    dr.BaseRow("_SortKey") = cnt
    cnt = cnt + 1
Next

找得好辛苦啊,终于遇上一个能用的了!

 回到顶部
帅哥哟,离线,有人找我吗?
L88919138
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:721 积分:6887 威望:0 精华:0 注册:2012/3/1 7:20:00
  发帖心情 Post By:2014/7/13 5:34:00 [只看该作者]

图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/7/13 15:40:00 [只看该作者]

以下是引用surgeme在2014-7-13 1:06:00的发言:
我一直都在找怎么把排序结果保存下来的办法,但试过你们写的这个代码,发现根本就重置不了"_sortkey"!
最终发现要像下面这样才行,你们对比一下别人写的有什么差别吧!

Dim cnt As Integer
For Each dr As DataRow In DataTables("表A").Select("","_SortKey")
    dr.BaseRow("_SortKey") = cnt
    cnt = cnt + 1
Next

找得好辛苦啊,终于遇上一个能用的了!

好,有心人。


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2014/7/13 21:16:00 [只看该作者]

一楼的办法为什么不可以?

 回到顶部
帅哥哟,离线,有人找我吗?
L88919138
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:721 积分:6887 威望:0 精华:0 注册:2012/3/1 7:20:00
  发帖心情 Post By:2014/7/21 20:39:00 [只看该作者]

这个是写在DataColChanged表事件下吗?

 回到顶部
总数 16 1 2 下一页