Foxtable(狐表)用户栏目专家坐堂 → 哪位高手给个行移动命令,用来完善狐表不能插入行的缺陷。


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

主题:哪位高手给个行移动命令,用来完善狐表不能插入行的缺陷。

帅哥哟,离线,有人找我吗?
ybil
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2009/3/2 15:05:00 [只看该作者]

以下是引用实话实说在2009-3-2 14:32:00的发言:
自动插入行实例中xh列(bouble型)如何自动产生编号呢(默认产生)?
[此贴子已经被作者于2009-3-2 14:33:02编辑过]

DataRowAdding

增加一行时执行,此时新增行(DataRow)已经创建,但并未真正增加到DataTable中,通常在此处对新增行进行默认值的设置。

e参数属性: 

DataTable:返回增加行的数据表。
DataRow:  返回新增加的行。

示例一

例如希望新增行的日期设为当前系统日期,姓名设为当前登录用户名,可以将DataRowAdding事件的代码设置为:

e.DataRow("日期") = Date.Today()
e.
DataRow("姓名"
) = User.Name

 

Compute

根据指定的表达式和条件进行计算,语法:

Compute(Expression, Filter)

Expression: 要计算的表达式
Filter:    可选参数,用于设置计算条件。

Exression和Filter都是表达式,语法和在应用篇中介绍的表达式完全相同,请参考表达式的运算符和函数
Expression使用聚合函数进行统计

例如,我们要统计订单表中产品PD01的销售金额,代码如下:

Dim Sum As Double
Sum = Tables("订单").Compute("Sum(数量)", "产品 = 'PD01'")
Output.Show(Sum)

还记得吗? DataTable也有Compute方法,两者功能一样,但是DataTable的Compute方法统计所有行,而Table的Compute方法只会统计Table中可见的行。

聚合函数

聚合函数用于数据统计,表达式支持下列聚合函数:

Sum:求和

Avg:平均

Min:最小值

Max:最大值

Count:计数

StDev:标准偏差

Var:方差

例如要对当前表的金额列汇总,公式为:

Sum([金额]) 


[此贴子已经被作者于2009-3-2 15:07:31编辑过]

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


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2009/3/2 15:26:00 [只看该作者]

DataRowAdding中取xh的最大值+1

Dim Sum As Double
Sum = DataTables("订单").Compute("max(xh)", "xh >0")
e.DataRow("xh") = sum+1
[此贴子已经被作者于2009-3-2 15:29:14编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2009/3/2 17:51:00 [只看该作者]

非常感谢kylin.唯一遗憾的是每个表都要为DataRowAdding写一遍代码

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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2009/3/2 18:40:00 [只看该作者]

以下是引用gaoqr在2009-2-28 15:31:00的发言:


谢谢了!

 kylin 老兄 解决了插入行的问题。

如实现行移动更好一些。

如选中要移动的行 A10 ,在菜单填入 5 , 确定 ,即可使 A10 行移动至第 5 行。


 下载信息  [文件大小:328.0 KB  下载次数:11]
图片点击可在新窗口打开查看点击浏览该文件:管理项目02.table


Dim n,n1,n2 as Double

With CurrentTable
    n = .Position
    n1 = ConfigBar.Items("编辑框1").Text
    if n1 =1
        n2 =.rows(n1-1)("xh")-1
    else       
        n2 = (.rows(n1-iif(n > n1,1,0))("xh")+.rows(n1-iif(n > n1,2,1))("xh"))/2   
    end if   
    .Current("xh") = n2
    .Sort = "xh"
End With


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


加好友 发短信
等级:小狐 帖子:353 积分:3058 威望:0 精华:0 注册:2008/9/1 6:39:00
  发帖心情 Post By:2009/3/3 7:52:00 [只看该作者]

感谢 ybil 版主! 

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


加好友 发短信
等级:小狐 帖子:353 积分:3058 威望:0 精华:0 注册:2008/9/1 6:39:00
  发帖心情 Post By:2009/3/3 14:19:00 [只看该作者]

把老六 与 ybil 版主 的代码整合在一起,可完美的解决行移动。

xh 为整数,可以隐藏。 

Dim a As String = MainTable.Name
For i As integer = 0 to DataTables(a).DataRows.Count - 1
    DataTables(a) .DataRows(i)("xh") = i + 1
Next
Dim n as integer = ConfigBar.Items("编辑框1").Text
Dim n1 as Double = CurrentTable.Position
if n1 > n
        CurrentTable.Current("xh") = n - 1
    else       
       CurrentTable.Current("xh") = n + 1
    end if   
CurrentTable.Sort = "xh"

 回到顶部
总数 26 上一页 1 2 3