首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

解决smartGWT GridPager分页组件复选框不能全选有关问题

2012-10-09 
解决smartGWT GridPager分页组件复选框不能全选问题GridPager分页组件在ListGrid 配置了setSelectionType(

解决smartGWT GridPager分页组件复选框不能全选问题
GridPager分页组件在ListGrid 配置了

setSelectionType(SelectionStyle.SIMPLE);

setSelectionAppearance(SelectionAppearance.CHECKBOX)

后会出现 “Can't select that many records at once”提示,并不能全选。

解决思路: 去掉提示,将选择grid中所有记录替换为选择所有可见的记录。

实现:

第一步: 在GridPager中为ListGrid的DataArrived事件添加去掉提示代码覆盖SmartClient的代码(因为SmartClient是在数据到达后就设置提示,并将checkBoxField设为不可用)。代码如下:

/*** 自定义ListGrid的CheckBoxField属性,覆盖SmartGWT的范围太大不能提示     * 需要在ListGrid的DataArrivedHandler事件处理中调用     *     * @param grid 要更改的ListGrid对象     */public native void changeCheckBoxFieldProperty(ListGrid grid)/*-{        var self = grid.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()();        if (self.getCurrentCheckboxField()) {                  var cbPos = self.getCheckboxFieldPosition(),falseImage = self.checkboxFieldFalseImage ||    self.booleanFalseImage;            // remove selectionRangeNotLoadedMessage(Can't select that many records at once) prompt            // checkbox is enablevar props = {                    disabled: false,                    showHover: false,                    prompt: null,                    title:  self.getValueIconHTML(falseImage, field)                }                        self.setFieldProperties(cbPos, props);        }    }-*/;grid.addDataArrivedHandler(new DataArrivedHandler()        {            public void onDataArrived(DataArrivedEvent event)            {                changeCheckBoxFieldProperty(grid);//覆盖SmartGWT不能选择提示                               updatePagerControls(getTotalPages());            }        });


第二步: 在定义ListGrid时,自定义表单点击事件
//自定义表头单击事件        xxxGrid.addHeaderClickHandler(new HeaderClickHandler(){        public void onHeaderClick(HeaderClickEvent event)            {            Boolean re = changeSelectRange(xxxGrid,event.getFieldNum());           if(re != null){                               event.cancel();            }                       }});    /**     * javascript本地方法。 自定义checkBoxHeader选择范围为当前页面,解决默认选择所有导致出现提示"Can't select that many records at once"问题。* @param grid 要更改CheckboxHeader选择的ListGrid对象     * @param fieldNum checkBoxField字段位置     * @return 如果该字段是checkBoxField则返回当前的状态,选中为true,未选为false,如果该字段不是checkBoxField,则返回null     */public native Boolean changeSelectRange(ListGrid grid ,int fieldNum)/*-{        var self = grid.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()();        var field = self.fields[fieldNum];        // check if the checkbox column header was clickedif (self.isCheckboxField(field) && self.selectionType != "single" && self.canSelectAll != false) {            if (field._allSelected) {                self.deselectAllRecords();                //更改checkboxHeader图标为不选中var icon =  self.checkboxFieldFalseImage || self.booleanFalseImage,                    title = self.getValueIconHTML(icon, field);                                    self.setFieldTitle(fieldNum, title);                field._allSelected=false;            } else {var visibleRows = self.getVisibleRows();//return visibleRows start end end point ,if no visiable return [-1,-1]                var dataRows = self.data.getRange(visibleRows[0], visibleRows[1]+1);                               self.selectRecords(dataRows, true);//更改checkboxHeader图标为选中var icon =  self.checkboxFieldTrueImage || self.booleanTrueImage,                    title = self.getValueIconHTML(icon, field);                                    self.setFieldTitle(fieldNum, title);                field._allSelected=true;            }return @com.smartgwt.client.util.JSOHelper::toBoolean(Z)(field._allSelected);        }else{            //if click other header clear all selected records             self.deselectAllRecords();             field._allSelected=false;return null;        }           }-*/;


附:smartGWT GridPager分页组件

热点排行