找回密码
 立即注册

QQ登录

只需一步,快速开始

lzh3452

银牌会员

32

主题

188

帖子

3914

积分

银牌会员

积分
3914

活字格认证

lzh3452
银牌会员   /  发表于:2012-3-31 17:39  /   查看:15509  /  回复:15
普通的Winform控件的ComboBox都是有一个Index和一个Value,设置SelectedIndex就能选中对应的Value,同时也能取到这个SelectedIndex。
我现在也需要这么做,显示的内容时普通的字,但是我希望取到的是那个SelectedIndex,而且可以用Index设置当前的选择状态。
因为我的从DB取到的是个Number类型的,所以这里这能这么做,不过我找了半天都没找到怎么设置和获取这个Index。

15 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-3-31 18:55:00
沙发

回复 1# lzh3452 的帖子

lzh3452 你好,
1.可以通过设置对应 Cell 的 Text 属性设置选择项。
2.可以通过 EditChange 事件获取相关属性。

  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             FarPoint.Win.Spread.CellType.ComboBoxCellType cmbocell1 = new FarPoint.Win.Spread.CellType.ComboBoxCellType();
  4.             cmbocell1.Items = (new String[] { "January", "February", "March", "April", "May", "June" });
  5.             fpSpread1.Sheets[0].Cells[1, 1].CellType = cmbocell1;
  6.             this.fpSpread1.Sheets[0].Cells[1, 1].Text = "March";
  7.         }
  8.         private void fpSpread1_EditChange(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
  9.         {
  10.             string selectText = "";
  11.             int selectIndex = 0;
  12.             if (e.Column == 2 && e.Row == 2)
  13.             {
  14.                 FarPoint.Win.FpCombo test = e.EditingControl as FarPoint.Win.FpCombo;
  15.                 selectText = test.SelectedText;
  16.                 selectIndex = test.SelectedIndex;
  17.             }
  18.         }
复制代码
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2012-4-1 10:29:00
板凳

回复 2# iceman 的帖子

如果当前Cell并不在编辑呢?不就没有EditingControl了么!赋值的时候只能用Text么?不能用Index么?还有,我不想选择时进入编辑模式,好像是可以直接写内容似的,我希望就像普通的ComboBox那样选择,怎么设置?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-1 13:53:00
地板

回复 3# lzh3452 的帖子

lzh3452 你好,
只能通过 Text 或者 Value 赋值。请问你的 Case 是要从数据库中取得 Int 类型值,然后赋值给对应的 ComboBoxCellType ,然后显示不同的 Text 吗?
那么,可以通过 ComboBoxCellType 的 ItemsData 去对应 数据库中值(ToString)即可。示例代码:

  1. string[] cbstr;
  2.             cbstr = new String[] { "One", "Two", "Three" };

  3.             string[] strval;
  4.             strval = new String[] { "1", "2", "3" };

  5.             combo.Items = cbstr;

  6.             combo.ItemData = strval;

  7.             combo.EditorValue = FarPoint.Win.Spread.CellType.EditorValue.ItemData;
  8.             fpSpread1.Sheets[0].Cells[0, 0].CellType = combo;
  9.             fpSpread1.Sheets[0].Cells[0, 0].Value = "2";
复制代码

2.ComboBoxCellType 下 Editable 可以设置其对应的单元格类型是否可编辑。
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2012-4-1 15:35:00
5#

回复 4# iceman 的帖子

这个好使了,不过有个新问题,我的Spread对于从DB中检索出来的数据,是不允许修改这一列,所以我为了不让用户修改,把这个Cell的Locked属性设为true了,结果只要用鼠标点击,这个Cell,SelectionColor就会消失,正行白色,这个Cell外面有虚线框这样的效果,这是什么原因呢?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-1 16:08:00
6#

回复 5# lzh3452 的帖子

lzh3452 你好,
不好意思,我没能理解你的 Case ,能提供设置之前和设置之后效果对比截图吗?
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2012-4-11 15:32:00
7#

jpg

jpg


上面的是正常的状态,下面的是鼠标点击ComboBox之后的效果,ComboBoxCell是被Lock的。
这个一直在等客户的确认,今天才给结果,其实已经不需要Lock这一列了,不过还是觉得挺奇怪的。
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2012-4-11 16:20:00
8#

回复 6# iceman 的帖子

我现在想做这么一件事,上面截图里第一列是数据库里的主键,如果这一列没有输入内容,则后面的也不能输入,如果这一列有值,则后面的也都要有值。
所以,ComboBox这个格我希望,在第一列有值时,可选项目不包含空,也就是必须选一个,如果第一列没有值,则可选项目只包含一个空。
我现在的做法是在EditModeOn事件里根据第一列的值,设置当前Cell的CellType,可是一设置,就会导致EditMode变成false,总也点不了,这个怎么办才好呢?
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2012-4-11 17:28:00
9#

回复 6# iceman 的帖子

上面的问题都解决了,不用再管了,但是又有新的问题了,我设置了
comboBoxCellType1.EditorValue = FarPoint.Win.Spread.CellType.EditorValue.ItemData;
使得我可以在DB登录是取到对应的Index,但是在保存到Excel时,也保存成Index了,这个时候怎么能保存成画面显示的字符串啊?
我是每个有值的Cell都单独设置了CellType,所以不能一个一个改,有没有别的方法?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-11 17:44:00
10#

回复 6# lzh3452 的帖子

lzh3452 你好,
不知道楼主的数据库结构如何。不过我想我们可以在绑定数据库之后通过同一 CellType 去设置该列单元格类型,之后遍历主键对应列,如果主键为空则重新设置 CellType。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部