FarPoint.Win.Spread 自定义表头

软件开发技术交流,同学习共进步,欢迎加群, 群号:169600532 软件开发技术交流群

 

最近C/S项目中用到FarPoint.Win.Spread,想在表头加个全选的checkbox,实现效果如图:

 

列的设置大家都清楚,直接可视化视图中设置该列CellType为CheckBox类型即可

表头的设置就需要费些周折了。一般是在加载时code,代码:

1 //设置行表头
2             FarPoint.Win.Spread.CellType.CheckBoxCellType celltype = new FarPoint.Win.Spread.CellType.CheckBoxCellType();
3             celltype.Caption = "全选";
4             spdPrintInfo_Sheet1.ColumnHeader.Cells[0, 0].CellType = celltype;
5             spdPrintInfo_Sheet1.ColumnHeader.Cells[0, 0].Text = "False";
View Code

由于我要把全选放在第一行,所以固定为【0,0】
然后需要给这个CheckBox定义点击事件,一般事件就是该控件的CellClick事件,详细代码如下:

 1 private void spdPrintInfo_CellClick(object sender, CellClickEventArgs e)
 2         {
 3             if (e.Column == 0)
 4             {
 5                 if (e.ColumnHeader)
 6                 {
 7                     if (spdPrintInfo_Sheet1.ColumnHeader.Cells[0, 0].Text == "False")
 8                     {
 9                         spdPrintInfo_Sheet1.ColumnHeader.Cells[0, 0].Text = "True";
10                         int rowcount = spdPrintInfo_Sheet1.RowCount;
11                         for (int i = 0; i < rowcount; i++)
12                         {
13                             spdPrintInfo_Sheet1.Cells[i, 0].Text = "True";
14                         }
15                     }
16                     else
17                     {
18                         spdPrintInfo_Sheet1.ColumnHeader.Cells[0, 0].Text = "False";
19                         int rowcount = spdPrintInfo_Sheet1.RowCount;
20                         for (int i = 0; i < rowcount; i++)
21                         {
22                             spdPrintInfo_Sheet1.Cells[i, 0].Text = "False";
23                         }
24                     }
25                 }
26                 else
27                 {
28                     if (spdPrintInfo_Sheet1.Cells[e.Row, 0].Text == "False")
29                     {
30                         bool allCheck = true;
31                         spdPrintInfo_Sheet1.Cells[e.Row, 0].Text = "True";
32                         for (int i = 0; i < spdPrintInfo_Sheet1.RowCount; i++)
33                         {
34                             if (spdPrintInfo_Sheet1.Cells[i, 0].Text == "False")
35                             {
36                                 allCheck = false;
37                                 break;
38                             }
39                         }
40                         if (allCheck)
41                         {
42                             spdPrintInfo_Sheet1.ColumnHeader.Cells[0, 0].Text = "True";
43                         }
44                     }
45                     else
46                     {
47                         spdPrintInfo_Sheet1.Cells[e.Row, 0].Text = "False";
48                         //将表头也设置为不勾选
49                         spdPrintInfo_Sheet1.ColumnHeader.Cells[0, 0].Text = "False";
50                     }
51                 }
52             }
53         }
View Code

如此,自己coding的全选就完成了,方法不是最好的,欢迎大家指正或建议更高效、简单的方法。

 

posted @ 2017-04-20 12:58  回眸@浅笑  阅读(2214)  评论(0编辑  收藏  举报