【问题标题】:CheckBox itemrenderer in datagrid got selected/unselected while scrollling in FLEX在 FLEX 中滚动时,datagrid 中的 CheckBox itemrenderer 被选中/取消选中
【发布时间】:2014-04-09 00:48:38
【问题描述】:

在我的应用程序中,我有一个动态创建的数据网格。 对于数据网格中的每个单元格,我都有复选框作为 itemrenderer。 截至目前,它按预期工作正常。但是在垂直滚动时,复选框会自动被选中/取消选中。我在“水平滚动”中也遇到了同样的问题,但我通过为每列设置“minWidth”解决了这个问题。

我正在创建这样的数据网格,

for(i=0;i<recordCount;i++)
            {   
                var obj:Object = new Object();
                for(var j:int=0;j<maxPages;j++){

                    {
                        obj["page"+(j+1)]=((xml..item.(pageOrder==(j+1))).length()>i)?(xml..item.(pageOrder==(j+1)))[i].pageTempVerId[0].toString()+" ("+(xml..item.(pageOrder==(j+1)))[i].pageVerUserName[0].toString()+")":"";

                    }

                }
                dp.addItem(obj);
            }

for(i=0;i<maxPages;i++)
            {
                var printPDFItemrenderer:ClassFactory = new ClassFactory(PrintPDFCheckboxComponent)
                printPDFItemrenderer.properties = {onClick: printpdfchkid_clickHandler};
                var grid:DataGridColumn = new DataGridColumn();
                grid.itemRenderer = printPDFItemrenderer;
                grid.headerText = pageName[i];
                grid.width = 150;
                grid.minWidth = 150;
                grid.dataField = "page" + (i+1);
                if(recordCount<(xml..item.(pageOrder==(i+1))).length())
                    recordCount = (xml..item.(pageOrder==(i+1))).length()
                col.push(grid);
            }
            printpdfdg.columns = col;


<mx:DataGrid id="printpdfdg" width="100%" height="380"
                     textAlign="center"  dataProvider="{dp}" sortableColumns="false" horizontalScrollPolicy="off" verticalScrollPolicy="auto" rowHeight="40" horizontalCenter="0" variableRowHeight="false">
        </mx:DataGrid>

在itemrenderer mxml文件中

<mx:checkBox id="printpdfchkid" label="{data[DataGridListData(listData).dataField]}" 
            selected="{data.data[DataGridListData(listData).dataField]}" labelPlacement="right" labelVerticalOffset="0"  
            click="onClick(event)" />

所以任何人都可以发现我做错了什么

【问题讨论】:

    标签: apache-flex checkbox datagrid scroll itemrenderer


    【解决方案1】:

    我有同样的经历。要解决此问题,请在您的对象中添加一个布尔属性,然后尝试在您的项目渲染器中遵循给定的代码。

    private var _obj:Object;
    
    public function get obj():Object
            {
                return _obj;
            }
    
            public function set obj(value:Object):void
            {
                _obj = value;
            }
    override public function set data(value:Object) : void
            {
                this.itemCheckBox.label = value.Name;
                this.itemCheckBox.selected = value.isSelected;
                obj = value;
    
    
            }
    //check box change event handler
    protected function itemCheckBox_changeHandler(event:Event):void
            {
                obj.isSelected = itemCheckBox.selected;
            }
    

    【讨论】:

      【解决方案2】:

      项目渲染器会被回收,因此当您滚动时,不再可见的行的渲染器会被重新用于现在可见的新行。 一种解决方案是覆盖 set data 属性并在那里设置复选框状态。因此,当重用渲染器时,渲染器数据设置器用于分配必须表示的新数据,您可以在此处进行适当的设置。绑定也应该起作用。您应该在 Flex 中搜索渲染器回收。 此外,您应该在您的问题中添加更多信息,例如您使用的确切 DataGrid(mx、spark 或高级)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 2011-05-02
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 2012-01-21
        相关资源
        最近更新 更多