Wijmo5 FlexGrid教程(14)- 实现列头添加CheckBox功能

发布时间:2016/06/22 00:06 发布者:Alice

返回博客中心

在之前的文章中,我们已经知道flexgrid会根据数据类型,展示不同的数据,比如数据是bool类型,那么绑定后,flexgrid就会变成CheckBox列。

本文就来介绍如何在列头上添加CheckBox,使得整个列统一成为CheckBox列。

 

我们需要使用的是itemFormatter的功能。

下面我们就来详细介绍。

首先,我们在数据绑定的时候,需要设置Active列,绑定数据源的bool类型。

代码参考:

  columns: [
                    { header: 'Name', binding: 'name' },
                    { header: 'Age', binding: 'age' },
                    { header: 'Active', binding: 'active' }
                ],

 

其次使用itemFormatter,判断cellType是ColumnHeader列头的时候,通过cell.innerHtml给列头添加一个Checkbox。并且监听这个CheckBox的Click事件。这样就可以当点击列头上的CheckBox的时候,整列的值做同步。

代码参考:

                itemFormatter: function (panel, r, c, cell) {                   
                           
                    if (panel.cellType == wijmo.grid.CellType.ColumnHeader) {
                        var flex = panel.grid;
                        var col = flex.columns[c];

                        // check that this is a boolean column
                        if (col.dataType == wijmo.DataType.Boolean) {

                            // prevent sorting on click
                            col.allowSorting = false;

                            // count true values to initialize checkbox
                            var cnt = 0;
                            for (var i = 0; i < flex.rows.length; i++) {
                                if (flex.getCellData(i, c) == true) cnt++;
                            }

                            // create and initialize checkbox
                            cell.innerHTML = '<input type="checkbox"> ' + cell.innerHTML;
                            var cb = cell.firstChild;
                            cb.checked = cnt > 0;
                            cb.indeterminate = cnt > 0 && cnt < flex.rows.length;

                            // apply checkbox value to cells
                            cb.addEventListener('click', function (e) {
                                flex.beginUpdate();
                                for (var i = 0; i < flex.rows.length; i++) {
                                    flex.setCellData(i, c, cb.checked);
                                }
                                flex.endUpdate();
                            });
                        }
                    }                
                }

 

这样,就可以在列头添加CheckBox,并实现同步。

效果如图:

image

本文的源码下载请点击(本文使用的是PureJS方式实现,代码所用版本为:wijmo5 2016V1):

 

如果你对Wijmo5感兴趣,可以到如下链接下载:

/download/?pid=54

更多资源:

Wijmo中文官网:/developer/wijmojs

Wijmo5在线示例:/developer/wijmojscore

Wijmo5产品文档:/developer/wijmojscore

如果依然有问题,可以到我们的官方产品论坛发帖咨询:http://gcdn.grapecity.com.cn/showforum-140.html

请参考Wijmo5技术文章汇总

《wijmo5 flexgrid基础教程》系列文章


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网