找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb

高级会员

53

主题

200

帖子

1059

积分

高级会员

积分
1059

微信认证勋章

yin_tb
高级会员   /  发表于:2019-10-28 17:07  /   查看:3267  /  回复:4
最近在用C1truedbgrid设计一个库存单据程序,发现一个很麻烦的事,举例如下:

form上一个C1truedbgrid,起名为tgrid1, 设计的列为 货品编码,货品名称,数量,单价,金额五列。一个textbox控件,名为txt1
绑定的datafield分别为item_no,item_name,qty,iprice,amount。创建一个datatable,列上上面一样,让tgrid1绑定到datatable
问题如下:
1、我发现,不论是设计时还是运行时设计的列,显示列的name属性是只读的,并且自动等于列的caption,并且可以多个列的caption相同,即name也就相同了。
     我认为,这是一个出厂设计的不足,因为中国的国情是,caption往往不同于name,有时,甚至允许用户在使用程序时,随时根据个人喜好变动caption,但这时,如果我在代码中,用tgrid1(tgrid1.row,"货品编码")获取单元格的值时,就会出问题,因为客户可能已经把caption改为:商品编号。这时,name也变成商品编号了,这一点做的不如VS本身带的datagridview好。
2、继续上面的另一种情况,假设(事实上在创建列时确实如此)每个列包含一个隐藏的index位置属性,那么在上面问题1里,货品编码,货品名称,数量,单价,金额,5个列的index默认为0,1,2,3,4,5,是从0开始的,如果在运行时,拖动各列改变了列的顺序,我发现,这个隐含属性的值是不变的。
方法如下:在tgrid1的RowColChange事件里,txt1.text=tgrid1.columns(tgrid1.col).caption
运行起来,拖动各列换位置,
你会发现,你点击各单元格变换,显示的caption并不是点击的单元格的caption,而是取的设计时的列的顺序,代表的caption。

  问题总结:在允许用户变动caption的情况下,我该如何随时取当前行某个单元格的值,因为,我也不知道客户会把caption变成什么,即name会变成什么,我曾试着去和列的datafield去比对,但也很痛苦,不好办。
想请教下版主。



4 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-10-28 17:30:01
沙发
你好,抱歉给你的使用带来不便

实际上,Caption和Name是可以设置为不同的,我猜测你目前的情况应该是设计界面设置的不一样,但是最终运行时绑定数据后,显示的列名还是绑定的datatable的列名吧,这个一般是数据绑定方式的问题

建议你将你这边项目,或者可以重现问题的示例项目发过来,我来帮你确定问题原因
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-10-28 17:40:27
板凳
Richard.Ma 发表于 2019-10-28 17:30
你好,抱歉给你的使用带来不便

实际上,Caption和Name是可以设置为不同的,我猜测你目前的情况应该是设 ...

我绑定的方式是tgrid1.SetDataBinding(tablename,"",True)  是保持原格式的。另外,我在代码中也试了,用代码重置name,但name是只读的,不论是设计时还是运行时,name是不许手工改的,你可以看下,在设计时,name就是灰色的,不让改。
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-10-28 18:00:28
地板
首先,感谢版主。我又测试了下,突然豁然开朗,原来写代码,有时是要蒙的 ,因为,文档中也没说可以这样用,我成功了,
tgrid1.columns(name).text  ,我一直以为这个name必须是和caption一样值的那个name,结果,我又试了下,把name写成datafiled竟然也行,可能是开发人员写了这个功能,但在文档中没有说明吧,呵呵。tgrid1.item(tgrid1.row,name)这样也可以,name也可以用datafiled,即绑定的那个列名,
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-10-28 18:34:14
5#
,解决了就好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部