找回密码
 立即注册

QQ登录

只需一步,快速开始

sgs

中级会员

74

主题

219

帖子

637

积分

中级会员

积分
637

活字格认证微信认证勋章

sgs
中级会员   /  发表于:2014-2-28 13:06  /   查看:9511  /  回复:10
我在winform窗体中添加了一个flexgrid控件,并直接绑定到datatable,但是datatable列都是英文名称
希望窗体打开后,显示各列为自定义的中文标题.
我在构造函数中写下
  1. flex.cols["testcol"].caption = "中文标题测试";
复制代码

打开窗体报错。

请问能否给出一个标准的方法?

PS:单独加个按钮,用这句代码是正常的。

10 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-2-28 15:41:00
沙发
回复 1楼sgs的帖子

我通过以下代码没能重现问题:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             DataTable dt = new DataTable();
  4.             dt.Columns.Add("编码");
  5.             dt.Columns.Add("名称");
  6.             dt.Columns.Add("售价");

  7.             dt.Rows.Add("AC23658901", "法国水果沙拉", "98");
  8.             dt.Rows.Add("AC23658902", "印度鸡排咖喱饭", "26");
  9.             dt.Rows.Add("AC23658903", "必胜客豪华套餐", "158");

  10.             this.c1FlexGrid1.DataSource = dt;
  11.             this.c1FlexGrid1.Cols["编码"].Caption = "test";
  12.         }
复制代码


能否把你的 Demo 发上来调试?
回复 使用道具 举报
sgs
中级会员   /  发表于:2014-2-28 17:04:00
板凳
我用您的方法Form1_Load事件里写代码也是正常的
但是为何写在构造函数中不行呢?
期待解惑。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-2-28 18:05:00
地板
回复 3楼sgs的帖子

构造函数指的是 Form 中吗?以下是我的 Demo:

本帖子中包含更多资源

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

x
回复 使用道具 举报
sgs
中级会员   /  发表于:2014-2-28 18:08:00
5#
您好,我是继承c1dockingtabpage的类,在这个页面上加的c1flexgrid,所以没有load事件
  1. namespace Krea
  2. {
  3.     public class PageMyOrder : C1DockingTabPage
  4.     {
  5.     }
  6. }
复制代码


由于没有form load事件只能在构造函数中写这个代码,求指教
回复 使用道具 举报
sgs
中级会员   /  发表于:2014-2-28 21:14:00
6#

您好,我已上传demo
在class1类中,您可以看下那句注释的代码

本帖子中包含更多资源

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

x
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-3-3 15:11:00
7#
回复 6楼sgs的帖子

debug 查看这个时机数据绑定还没有完成,所以不存在 produdct 为列名的列。请通过以下代码来改变列名:

  1. public Class1()
  2.         {
  3.             InitializeComponent();
  4.             this.bindingSource1.DataSource = dataSet1;
  5.             this.bindingSource1.DataMember = "testdt";
  6.             this.c1FlexGrid1.DataSource = this.bindingSource1;
  7.             this.c1FlexGrid1.DrawMode = C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
  8.             this.c1FlexGrid1.OwnerDrawCell += c1FlexGrid1_OwnerDrawCell;

  9.         }

  10.         void c1FlexGrid1_OwnerDrawCell(object sender, C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
  11.         {
  12.             if (this.c1FlexGrid1.Cols[e.Col].Caption=="product")
  13.             {
  14.                 this.c1FlexGrid1.Cols[e.Col].Caption = "产品";
  15.             }
  16.         }
复制代码
回复 使用道具 举报
sgs
中级会员   /  发表于:2014-3-3 20:11:00
8#
  1. public Class1()
  2.         {
  3.             InitializeComponent();
  4.             ..........
  5.             this.c1FlexGrid1.Invalidated += new InvalidateEventHandler(class1_Invalidated);
  6.         }
  7. void class1_Invalidated(object sender, InvalidateEventArgs e)
  8.         {
  9.            this.c1FlexGrid1.Cols["product"].Caption = "产品";
  10.         }
复制代码


我用这个事件,也成功了,不知是否可行?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-3-4 10:33:00
9#
回复 8楼sgs的帖子

sgs 你好,
我这边使用你的方法抛出了异常。demo:

本帖子中包含更多资源

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

x
回复 使用道具 举报
sgs
中级会员   /  发表于:2014-3-4 13:44:00
10#
我先用您的方法,异常的问题我自己再研究下
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部