liujun_sx 发表于 2014-8-21 11:26:00

【WinForms】C1Winform的FlexGrid中列名和绑定字段的一致性

C1FlexGrid Column Editor 你选择列,有Name,DataType,Caption属性,我认为Name为表格的列名称,我把设置好所有列,当我在grid,选中某一列,会出现C1FlexGrid任务框,里面有Data Field,我在此列维护我对应数据库的列字段,后来经过测试发现Name和Data Field是一致的,修改了DataField,Name也就变了,为何这样设计呢,我的Grid的列名为C1、C2、C3、C4,而数据库对应字段为D1、D2、D3、D4,因为我后续要访问这些列名,后来没办法了,只能这样用FlexGrid1.Cols.ImageMap = Hashtable1,因为这一列开始也要绑定一个主键列,依据主键列再显示为图片,这样用我觉得很不好,列的顺序调整就有问题,这样写很不规范。
C1Winform的FlexGrid中列名和绑定字段的一致性,是必须的还是我们的应用问题?请高手指点

Alice 发表于 2014-8-21 15:50:00

回复 1楼liujun_sx的帖子

你好。
绑定情况下Column的Name是根据数据源的列自动生成的。
DataField是在设计时为了方便用户使用提供的,当使用代码绑定的时候,并没有这个属性。代码中C1FlexGrid.Column下只有Name属性。
对于某些用例,用户不想自动生成数据,就可以将AutoGenerateColumns设置为false,DataSource设置为数据源。然后自己定义C1FlexGrid.Column,并将Name设置为数据源的对应列名。就可以生成这一列的相关数据。
对于你遇到的问题,能否将例子发上来,我们就这个具体的例子分析怎么实现?

liujun_sx 发表于 2014-8-21 16:58:00

你能留下分机号吗,想电话沟通,你没有明白我的意思

liujun_sx 发表于 2014-8-21 17:41:00

我的界面如下

界面上Caption和Name的对应关系为
编号: RESULT_ID,名称 :RESULT_NAME,预览:RESULT_ID
预览列是要显示数据库的二进制文件的,通过Hashtable完成,我的代码如下
DataTable table = bll.GetList(strWhere).Tables;
Hashtable ht = new Hashtable();
foreach (DataRow dr in table.Rows)
{
       ht.Add(dr["RESULT_ID"], LoadImage(dr["RESULT_PIC"]));
}
dgMain.AutoGenerateColumns = false;
if (table != null && table.Rows.Count > 0)
{
       table.DefaultView.Sort = "RESULT_ID ASC";
       dgMain.DataSource = table;
       dgMain.Cols.ImageMap = ht;
       dgMain.Cols.ImageAndText = false;
       dgMain.Cols.ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Stretch;
}
功能是已经实现了,我就是感觉dgMain.Cols代码可读性不好,万一哪一天调整列的顺序,还需要修改代码,
关键是FlexGrid没有一个唯一的列名,这一点很不好,或者就我现在的办法,你们还有更好解决办法

Alice 发表于 2014-8-21 18:34:00

回复 4楼liujun_sx的帖子

已经通过电话沟通过一次,然后论坛也收到了图片和步骤的详细说明。
我调查下给你个反馈。

Alice 发表于 2014-8-22 09:58:00

回复 4楼liujun_sx的帖子

在已经满足产品需求的基础上,你需要更高效的维护代码,这点我们了解。
而你的需求,是需要一个唯一的列名,这样子在修改代码时候,不用把所有Cols里的index一个一个的修改,避免产生遗漏。
针对这个问题,你可以定义一个全局变量给index,这样,如果名字改变,只用修改一句代码。全局变量:private int _RESULT_ID= 3;
代码参考:
private int _RESULT_ID= 3;
dgMain.Cols.ImageMap = ht;
dgMain.Cols.ImageAndText = false;
dgMain.Cols.ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Stretch;

liujun_sx 发表于 2014-8-22 10:46:00

现在这一点还是不太完美,如果有唯一的列名,一句代码都可以不修改的,本来原始Grid的列Name和Data Field就是一个映射关系,它是一对多的关系。

Alice 发表于 2014-8-22 18:02:00

回复 7楼liujun_sx的帖子

我理解你的需求,有关您的需求,我会帮助您提交到产品组。
由于我们的控件是非定制性商品,不保证需求会被采纳。
页: [1]
查看完整版本: 【WinForms】C1Winform的FlexGrid中列名和绑定字段的一致性