找回密码
 立即注册

QQ登录

只需一步,快速开始

lzh3452

银牌会员

32

主题

188

帖子

3914

积分

银牌会员

积分
3914

活字格认证

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

15 个回复

正序浏览
iceman
社区贡献组   /  发表于:2012-4-12 09:02:00
16#

回复 15# lzh3452 的帖子

恩,这也是个好方法,感谢 lzh3452 把问题的解决方案反馈给我们~
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2012-4-11 18:58:00
15#

回复 14# iceman 的帖子

我是先逐列找ComboBox类型的列,然后找到一个,就对这一列的每一个Cell都重新设置
((FarPoint.Win.Spread.CellType.ComboBoxCellType)sheetview.Cells[row, col].CellType).EditorValue = EditorValue.ItemData;
保存后在同样的方法设回来,就不用创建新的CellType了,也能最大限度的减少循环次数,没什么问题就这么弄了吧,目前也看不出性能是否会有影响,先这样吧。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-11 18:12:00
14#

回复 13# lzh3452 的帖子

如果 CellType 有共性,当然可以同一 CellType 设置给不同单元格,但是如果要求 CellType 内的元素不同,则需要重新创建。进而只能逐一设置。
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2012-4-11 18:06:00
13#

回复 11# iceman 的帖子

这不是要每个Cell都得设置么?我有很多条的,而且每一条都有一个CellType,还有就是怎么能直接改一个Cell的CellType?只能创建一个新的么?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-11 18:05:00
12#

回复 9# lzh3452 的帖子

原因为:导出 Excel 时,取得是 Spread DataModel ,ComboBoxCellType 的 EditorValue 会被写入对应单元格 DataModel。所以会导出 Index。所以就需要在导出之前设置 DataModel 对应 EditorValue.String
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-11 17:55:00
11#

回复 9# lzh3452 的帖子

lzh3452 你好,可以做如下设置:

  1.             combo.EditorValue = FarPoint.Win.Spread.CellType.EditorValue.ItemData;
  2.             combo.ItemData = strval;
  3.             fpSpread1.Sheets[0].Columns[3].CellType = combo;
  4.             fpSpread1.Sheets[0].Columns[3].Locked = true;‘

  5.             //导出之前转换为 EditorValue.String
  6.             combo.EditorValue = FarPoint.Win.Spread.CellType.EditorValue.String;
  7.             this.fpSpread1.SaveExcel(filename);
  8.            //导出之后转换为 EditorValue.ItemData
  9.             combo.EditorValue = FarPoint.Win.Spread.CellType.EditorValue.ItemData;
复制代码
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-11 17:44:00
10#

回复 6# lzh3452 的帖子

lzh3452 你好,
不知道楼主的数据库结构如何。不过我想我们可以在绑定数据库之后通过同一 CellType 去设置该列单元格类型,之后遍历主键对应列,如果主键为空则重新设置 CellType。
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2012-4-11 17:28:00
9#

回复 6# iceman 的帖子

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

回复 6# iceman 的帖子

我现在想做这么一件事,上面截图里第一列是数据库里的主键,如果这一列没有输入内容,则后面的也不能输入,如果这一列有值,则后面的也都要有值。
所以,ComboBox这个格我希望,在第一列有值时,可选项目不包含空,也就是必须选一个,如果第一列没有值,则可选项目只包含一个空。
我现在的做法是在EditModeOn事件里根据第一列的值,设置当前Cell的CellType,可是一设置,就会导致EditMode变成false,总也点不了,这个怎么办才好呢?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部