找回密码
 立即注册

QQ登录

只需一步,快速开始

liujun_sx

论坛元老

8

主题

39

帖子

8118

积分

论坛元老

积分
8118

活字格认证

liujun_sx
论坛元老   /  发表于:2014-8-21 11:26  /   查看:11519  /  回复:7
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[3].ImageMap = Hashtable1,因为这一列开始也要绑定一个主键列,依据主键列再显示为图片,这样用我觉得很不好,列的顺序调整就有问题,这样写很不规范。
C1Winform的FlexGrid中列名和绑定字段的一致性,是必须的还是我们的应用问题?请高手指点

7 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-8-21 15:50:00
沙发
回复 1楼liujun_sx的帖子

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
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[0];
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[3].ImageMap = ht;
       dgMain.Cols[3].ImageAndText = false;
       dgMain.Cols[3].ImageAlign = C1.Win.C1FlexGrid.ImageAlignEnum.Stretch;
}
功能是已经实现了,我就是感觉dgMain.Cols[3]代码可读性不好,万一哪一天调整列的顺序,还需要修改代码,
关键是FlexGrid没有一个唯一的列名,这一点很不好,或者就我现在的办法,你们还有更好解决办法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-21 18:34:00
5#
回复 4楼liujun_sx的帖子

已经通过电话沟通过一次,然后论坛也收到了图片和步骤的详细说明。
我调查下给你个反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-22 09:58:00
6#
回复 4楼liujun_sx的帖子

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
liujun_sx
论坛元老   /  发表于:2014-8-22 10:46:00
7#
现在这一点还是不太完美,如果有唯一的列名,一句代码都可以不修改的,本来原始Grid的列Name和Data Field就是一个映射关系,它是一对多的关系。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-22 18:02:00
8#
回复 7楼liujun_sx的帖子

我理解你的需求,有关您的需求,我会帮助您提交到产品组。
由于我们的控件是非定制性商品,不保证需求会被采纳。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部