找回密码
 立即注册

QQ登录

只需一步,快速开始

xjsxjs197
论坛元老   /  发表于:2014-7-10 09:25  /   查看:8065  /  回复:5
为了实现不同的需求,C1Grid编辑时,没有使用原始的ComboBox,而是将自定义的ComboBox嵌入了Grid。
在OnStartEdit事件中,根据Grid的DataMap属性设置了自定义的ComboBox的各个Item。

在Grid和某个数据源进行绑定时,对应comboBox列的编辑,没有任何问题。
但是如果Grid没有绑定,而是直接设置某一列的DataMap属性,那么在编辑这列,变更下拉框的值,离开这列焦点后,刚才编辑过的Cell就变空白了。

请问使用自定义Combobox需要什么特殊的处理吗?

5 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-7-10 11:53:00
沙发
回复 1楼xjsxjs197的帖子

你好。
我是使用C1FlexGrid的ComboList去添加的ComboBox。经过测试没有出现你说的问题。我的测试代码:
  1. //Combo column
  2.             Column comboCol = c1FlexGrid1.Cols[_comboCol];
  3.             comboCol.ComboList = "|共和制|联邦共和制|君主立宪制|君主国会制";
  4.             //comboCol.Caption = "Editable Combobox";
  5.             comboCol.Caption = "可编辑组合框";
  6.             comboCol.Width = 150;
复制代码

你的自定义ComboBox是怎么写的呢?能不能详细信息,Sample或是代码?以便快速帮你解决问题。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
xjsxjs197
论坛元老   /  发表于:2014-7-10 13:58:00
板凳
你好:
上面提供的代码,使用的是还是原来的ComboBox.

这边的大致代码如下:
protected override void OnStartEdit(RowColEventArgs e)
{
      if (this.Editor is ComboBox)
     {
            自定义ComboBox cbo = new 自定义ComboBox;
            ........
            this.Editor = cbo ;
      }
}
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-10 19:51:00
地板
回复 3楼xjsxjs197的帖子

你好,自定义了myCombo,依然没有发现你说的问题。
我的测试代码:
  1.   void c1FlexGrid1_StartEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
  2.         {
  3.             if (this.c1FlexGrid1.Editor is ComboBox)
  4.             {
  5.                 myCombo cbo = new myCombo();
  6.                 cbo.Items.Add("mytiem");
  7.                 //........
  8.                 this.c1FlexGrid1.Editor = cbo;
  9.             }

  10.         }

  11.         private void Form1_Load(object sender, EventArgs e)
  12.         {
  13.             myCombo1.Items.Add("aaa");
  14.             myCombo1.Items.Add("bbb");
  15.             this.c1FlexGrid1.Cols[1].Editor = myCombo1;
  16.         }
复制代码


你能否把你的例子发下,以便我快速的帮助你解决问题?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
xjsxjs197
论坛元老   /  发表于:2014-7-11 09:15:00
5#
你好:
非常感谢协助调查,情况和代码都比较复杂,不过问题已经解决了。

情况大致反馈一下:
1:每次StartEdit事件中,根据列的DataMap属性,new一个新的ComboBox。
2:ComboBox中Items中加入的是DataMap的Value,SelectedIndex变化时,返回给Grid cell的是DataMap的Key。
3:取得Grid Cell的值时,没有注意到类型问题,Grid Cell返回的是字符串类型的"1",使用时写成了as int,结果变成空了。

两种解决方法:
1:手动类型转换:取得Grid Cell的值时,将类型正确转换;
2:让Grid转换:设置Grid列的类型,Grid内部会自动转换;

评分

参与人数 1金币 +200 收起 理由
Alice + 200 反馈解决问题方法,提供帮助。

查看全部评分

回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-11 13:59:00
6#
你好:
非常感谢协助调查,情况和代码都比较复杂,不过问题已经解决了。

情况大致反馈一下:
1:每次StartEdit事件中,根据列的DataMap属性,new一个新的ComboBox。
2:ComboBox中Items中加入的是DataMap的Value,SelectedIndex变化时,返回给Grid cell的是DataMap的Key。
3:取得Grid Cell的值时,没有注意到类型问题,
xjsxjs197 发表于 2014-7-11 9:15:00


好厉害,这么复杂都解决了。
非常高兴能够给你提供帮助,如果有新问题欢迎发新帖讨论。

你的解决方法对以后的此类问题有参考价值,所以送出200金币。参考:金币奖励

最后,欢迎就本次回答给我评分,谢谢。

评分

参与人数 1满意度 +5 收起 理由
xjsxjs197 + 5 反馈答案也能得到好多的金币。 多谢美女版主及时的回答。

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

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