可以了,马工,感谢。只是没想到,弄的这么复杂,要是不懂LINQ,调用Enumerable,还真搞不定。很多新手可能看半天才能明白。为了取一个当前显示的总列数,用这些方法有些复杂。我觉得对C1TrueDBGrid你得给研发提以下改进:
1、当前name是readonly的,和Caption一样,这在英文国家也还行,但在中文国家不适用,因为咱们中国人编码用英文,但显示用中文,所以,应该把它两个分开,是不同的属性。你像FlexGrid就专门有name,index,Caption等属性,还专门有Col 和Row,调用起来方便舒服。以下datafield是绑定的列名:
虽然默许的调用Splits[0].DisplayColumn("datafield").DataColumn......或 Columns("datafield")这样也行,但总感觉很不适应,
就像上次咱们沟通单元格的锁定问题, 我开始用e.column.name="citem_no"这样,后来才想到,不能用name,因为name和Caption一样,是中文。
得改成 e.column.datacolumn.datafield.tostring() ="citem_no"
取一个简单的值,得转几转。
VS自带的DataGridView,也是美国研发吧, name和Caption分离,DGV1.CurrentROW是当前焦点行,DGV1.CurrentCell是当前单元格,DGV.DisplayColumnsCount是显示的列数,DGV.ColumnsCount是总列数,DisplayIndex是显示位置 。我也感觉C1有很多它没有的优点,但有些地方觉得麻烦,呵呵。现在基本摸清了C1TrueDBgrid的方法了,啥时用displayColumns啥时用columns,啥时要比对转换成datafield,反正是代码长。
2、封装多加几个属性,把咱们用LINQ获取的,直接封装成属性。虽然我自己现在准备这样做,但标准产品那样其它用户调用起来方便。
3、还有个BUG,我抽空在DEMO里呈现,就是当前网格绑定到了datatable,正在编辑模式,如果从数据库中读取格式数据,清除所有列,重新创建列,按新布局排列,再绑定到当前正在编辑的datatable,有时,网格里会变成红X号,应该是因为刷新的问题,或是fetchstyle啥原因。
临时就说这些吧,费点事功能也都差不多了。
|