以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]求一个简单的自动填表实例 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=7185) |
||||
-- 作者:我会用狐表 -- 发布时间:2010/5/23 9:18:00 -- [求助]求一个简单的自动填表实例 由于本人基础太差,对狐表始终不得要领,现求一个实例,见附件
|
||||
-- 作者:mr725 -- 发布时间:2010/5/23 10:07:00 -- 试试这个(放在datacolchanged事件中): dim bm as string = currenttable.current("部门编码") currenttable.current("部门全称") = dr("部门全称") & "-" & currenttable.current("部门名称") [此贴子已经被作者于2010-5-23 10:07:24编辑过]
|
||||
-- 作者:我会用狐表 -- 发布时间:2010/5/23 10:33:00 -- 谢谢,但第二项要求“填列部门编码时,编码必需依级次增加,不能填无上级的编码”还不能满足,虽然有提示(提示好像是代码错误提示),但还是能填不符合要求的编码。如:在没有编码3的时候还是能填编码3-1或者3-2-1 。请mr725兄再帮助完善一下 |
||||
-- 作者:狐狸爸爸 -- 发布时间:2010/5/23 10:41:00 -- 这样不报错:
Select Case e.DataCol.Name [此贴子已经被作者于2010-5-23 10:46:16编辑过]
|
||||
-- 作者:mr725 -- 发布时间:2010/5/23 11:20:00 -- 以下是引用我会用狐表在2010-5-23 10:33:00的发言:
谢谢,但第二项要求“填列部门编码时,编码必需依级次增加,不能填无上级的编码”还不能满足,虽然有提示(提示好像是代码错误提示),但还是能填不符合要求的编码。如:在没有编码3的时候还是能填编码3-1或者3-2-1 。请mr725兄再帮助完善一下 以为你会用狐表呢··· 在4楼基础上再加些判断: If e.DataCol.Name = "部门编码" and e.DataRow.IsNull("部门编码") Then |
||||
-- 作者:我会用狐表 -- 发布时间:2010/5/23 11:24:00 -- 以上两种代码,还不能满足“填列部门编码时,编码必需依级次增加,不能填无上级的编码”。如:在没有编码3的时候,如在部门编码列填3-1或者3-2-1,希望能给出提示“编码错误”,并清除所填内容.谢谢
|
||||
-- 作者:我会用狐表 -- 发布时间:2010/5/23 11:34:00 -- 对了,谢谢 |
||||
-- 作者:狐狸爸爸 -- 发布时间:2010/5/24 8:32:00 -- 楼主记得使用Datacolchanged事件的时候,一定要判断列名。
一定要判断列名! 不少人,特别是初学编程的人,没有在DataColChanged事件中判断列名的习惯,例如为了在订单表计算金额,往往只是在DataColChanged简单地写入代码: Dim dr As DataRow = e.DataRow 这样可能会带来严重的后果,首先会导致重复的计算,因为数量、单价或折扣发生变化后,触发DataColChanged事件,计算得出新的金额,而金额列内容的变化,会再次触发DataColChanged事件,使得金额被重新计算一次;实际上其他不相关列,例如日期、客户、产品等列内容发生变化后,同样会触发DataColChanged事件,导致金额列被重新计算。 显然这样的代码,效率实在是太低,而且在机缘巧合的情况下,很可能会出现死循环,导致程序崩溃。 所以我们一定要养成良好的习惯,在编写DataColChanged事件代码时,判断发生变化列的名称,只有相关列发生变化时,才进行特定的重算工作。 例如: Dim dr As DataRow = e.DataRowSelect Case e.DataCol.Name Case "数量","单价","折扣" dr("金额") = dr("数量") * dr("单价") * (1 - dr("折扣")) End Select 这节的内容不仅仅针对DataColChanged,实际上对于任何表事件都有效,例如DataColChaning、PrepareEdit、ValidateEdit、AfterEdit等等。 |