最近在用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去比对,但也很痛苦,不好办。
想请教下版主。
|
|