设置价值的问题

时间:2014-02-12 13:53:21

标签: actionscript-3 flex flex4.5

     private function restoreColumns( headerTextArray:ArrayCollection, widthArray:ArrayCollection):void  {
            dg.removeEventListener( IndexChangedEvent.HEADER_SHIFT, this.saveColumns );     
            for (var n:int = 0; n < headerTextArray.length; n++)
            {   
                trace ( "Before: n: " + n + " WA: " + widthArray.getItemAt(n) + " DG: " + dg.columns[n].width);
//              moveColumnTo(String(headerTextArray.getItemAt(n)), n); 
                // Problems copying for the last column
                dg.columns[n].width = 0;    
                trace ( "Middle: n: " + n + " WA: " + widthArray.getItemAt(n) + " DG: " + dg.columns[n].width);
                dg.columns[n].width = widthArray.getItemAt(n);              
                trace ( "After:  n: " + n + " WA: " + widthArray.getItemAt(n) + " DG: " + dg.columns[n].width);
            }   
            dg.addEventListener( IndexChangedEvent.HEADER_SHIFT, this.saveColumns );
        }

以下是上述代码的跟踪输出:

Before: n: 0 WA: 113 DG: 95
Middle: n: 0 WA: 113 DG: 20
After:  n: 0 WA: 113 DG: 113
Before: n: 1 WA: 71 DG: 85
Middle: n: 1 WA: 71 DG: 20
After:  n: 1 WA: 71 DG: 71
Before: n: 2 WA: 41 DG: 101
Middle: n: 2 WA: 41 DG: 101
After:  n: 2 WA: 41 DG: 101

如您所见,

  1. 我无法将dg.columns [2] .width设置为所需的值。 [最后一栏出现问题。]

  2. 我也无法在中间跟踪之前设置dg.columns [0] .width = 0.

  3. 我最初认为moveColumnTo()可能与问题有关,但即使在对函数的调用进行评论之后我也遇到了问题。

    有什么问题?

    以下是调用restoreColumns的代码。 [我刚才意识到我可以编辑我原来的帖子并添加它。]

    private function processQueryResponse(evt:DWSQLevent):void {
                this.removeEventListener( IndexChangedEvent.HEADER_SHIFT, this.saveColumns );   
                this.removeEventListener( ResizeEvent.RESIZE, this.saveColumns );           
                var headerTextArray:ArrayCollection = new ArrayCollection();
                var widthArray:ArrayCollection = new ArrayCollection();
                if ( query.queryMessage == "SELECT" ) {
                    if (evt.dataRetrieved == true && query.queryData && query.queryData.length > 0 && query.queryData[0].length > 0 ) {
                        initialColumns = query.queryData[0];
                        var record:Object;
                        for (var n:Number = 0; n< this.columns.length; n++)
                        {
                            record = initialColumns.getItemAt(n);
                            headerTextArray.addItem(record.headertext);
                            widthArray.addItem( record.width );
                        }
                        restoreColumns( headerTextArray, widthArray);
                        haveColumnData = true;
                    } else if ( query.queryData.length > 0 && query.queryData[0].length == 0 ){
                        Alert.show( "Problems reading column data from database. Saved column order not restored." );   
                        trace ("Select error / no rows "); // alert moving not done
                    }
                } else {
                }   
                this.addEventListener( IndexChangedEvent.HEADER_SHIFT, this.saveColumns );  
                //          this.addEventListener( ResizeEvent.RESIZE, this.saveColumns );
            }
    

1 个答案:

答案 0 :(得分:0)

看起来你应该在循环条件中使用n < widthArray.length而不是headerTextArray.length