szpzr 发表于 2021-12-6 12:55:23

WPF下的CheckBox

本帖最后由 szpzr 于 2021-12-6 12:57 编辑

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


Richard.Ma 发表于 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 发表于 2021-12-7 10:44:13

这个取决于你单元格中的值是什么,比如就是True和False的字符串,你就判断字符串就行
比如是0,1,要1的时候就选中,可以参考下面的代码

DrawingObject
class MyDrawingObjectProvider : IDrawingObjectProvider
    {
      public DrawingObject[] GetDrawingObjects(Worksheet sheet, int row, int column, int rowCount, int columnCount)
      {
            DrawingObject dobj;
            int value = -1;
            object obj = sheet.GetValue(row, column);
            if (obj != null)
            {
                if (obj is int) value = (int)obj;
                else
                {
                  int.TryParse(obj.ToString(), out value);
                }
                if (value > 2) value = -1;
            }
            
            CheckBox control = new CheckBox() ;
            int intvalue = 0;
            if(obj!=null)
                int.TryParse(obj.ToString(),out intvalue);
            control.IsChecked = intvalue==1?true:false;

            control.Checked += new RoutedEventHandler((sender, args) => {
                sheet.SetValue(row, column, 1);
            });
            control.Unchecked += new RoutedEventHandler((sender, args) => {
                sheet.SetValue(row, column, 0);
            });


            dobj = new ControlDrawingObject(row, column, control);
            return new DrawingObject[] { dobj };
      }
    }


应用
      public MainWindow()
      {
            InitializeComponent();
            ss.ActiveSheet.ColumnCount = 3;
            ss.ActiveSheet.RowCount = 3;
            ss.ActiveSheet.Cells.Value = 1;
            ss.ActiveSheet.Cells.Value = 1;
            DrawingObjectManager.SetDrawingObjectProvider(ss, new MyDrawingObjectProvider());
            

      }

szpzr 发表于 2021-12-7 10:54:47

比如窗体上有个按钮,单击后判断A列哪一行勾选后不勾选

Richard.Ma 发表于 2021-12-7 10:59:44

这个没有办法直接判断,但是其实在上面的这种显示方式里, 你的单元格值已经和你的复选框是否勾选关联起来了,比如上面0,1的代码例子,设置了Value=1,自然就是勾选的

那么你要判断A列哪一行勾选的只需要遍历一下a列的单元格值就行了,=1的自然是勾选的

szpzr 发表于 2021-12-10 13:10:56

谢谢

Richard.Ma 发表于 2021-12-10 13:31:23

不客气
页: [1]
查看完整版本: WPF下的CheckBox