找回密码
 立即注册

QQ登录

只需一步,快速开始

szpzr

高级会员

138

主题

552

帖子

1754

积分

高级会员

积分
1754

活字格认证

[已处理] WPF下的CheckBox

szpzr
高级会员   /  发表于:2021-12-6 12:55  /   查看:2015  /  回复:7
本帖最后由 szpzr 于 2021-12-6 12:57 编辑

列类型设置为 CheckBox 类型,如何判断是否勾选或不勾选?发错了,应该在spread。


7 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-12-6 15:16:52
沙发
本帖最后由 Richard.Ma 于 2021-12-6 15:24 编辑

wpf没有专门设置单元格显示类型的,没法直接设置为checkbox,你目前是如何设置复选框的,我看你翻了之前的一个老帖子,是通过重写Workbook来实现的吗
回复 使用道具 举报
szpzr
高级会员   /  发表于:2021-12-6 19:23:14
板凳
是的。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-12-7 10:44:13
地板
这个取决于你单元格中的值是什么,比如就是True和False的字符串,你就判断字符串就行
比如是0,1,要1的时候就选中,可以参考下面的代码

DrawingObject
  1. class MyDrawingObjectProvider : IDrawingObjectProvider
  2.     {
  3.         public DrawingObject[] GetDrawingObjects(Worksheet sheet, int row, int column, int rowCount, int columnCount)
  4.         {
  5.             DrawingObject dobj;
  6.             int value = -1;
  7.             object obj = sheet.GetValue(row, column);
  8.             if (obj != null)
  9.             {
  10.                 if (obj is int) value = (int)obj;
  11.                 else
  12.                 {
  13.                     int.TryParse(obj.ToString(), out value);
  14.                 }
  15.                 if (value > 2) value = -1;
  16.             }
  17.             
  18.             CheckBox control = new CheckBox() ;
  19.             int intvalue = 0;
  20.             if(obj!=null)
  21.                 int.TryParse(obj.ToString(),out intvalue);
  22.             control.IsChecked = intvalue==1?true:false;

  23.             control.Checked += new RoutedEventHandler((sender, args) => {
  24.                 sheet.SetValue(row, column, 1);
  25.             });
  26.             control.Unchecked += new RoutedEventHandler((sender, args) => {
  27.                 sheet.SetValue(row, column, 0);
  28.             });


  29.             dobj = new ControlDrawingObject(row, column, control);
  30.             return new DrawingObject[] { dobj };
  31.         }
  32.     }
复制代码



应用
  1.         public MainWindow()
  2.         {
  3.             InitializeComponent();
  4.             ss.ActiveSheet.ColumnCount = 3;
  5.             ss.ActiveSheet.RowCount = 3;
  6.             ss.ActiveSheet.Cells[0, 0].Value = 1;
  7.             ss.ActiveSheet.Cells[1,1].Value = 1;
  8.             DrawingObjectManager.SetDrawingObjectProvider(ss, new MyDrawingObjectProvider());
  9.             

  10.         }
复制代码

image.png222423400.png
回复 使用道具 举报
szpzr
高级会员   /  发表于:2021-12-7 10:54:47
5#
比如窗体上有个按钮,单击后判断A列哪一行勾选后不勾选
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-12-7 10:59:44
6#
这个没有办法直接判断,但是其实在上面的这种显示方式里, 你的单元格值已经和你的复选框是否勾选关联起来了,比如上面0,1的代码例子,设置了Value=1,自然就是勾选的

那么你要判断A列哪一行勾选的只需要遍历一下a列的单元格值就行了,=1的自然是勾选的
回复 使用道具 举报
szpzr
高级会员   /  发表于:2021-12-10 13:10:56
7#
谢谢
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-12-10 13:31:23
8#
不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部