2010-01-11 45 views
2

我想遠程(在數據庫上)保存Flex3 DataGrid的狀態(可見列,列寬和順序)。保存dataGrid的狀態:可見列,列寬和順序

對於寬度和可見性,我可以通過訪問每個列屬性來簡單地保存它們..醜陋但可能.. 但是對於訂單?我必須動態創建dataGrid嗎?

任何想法表示讚賞 感謝

+0

您是否在討論多個數據網格的排列順序?或列的排序順序? – Shua 2010-01-11 15:38:54

+0

列的順序,這意味着標題(不是每列的排序) – luca 2010-01-11 17:59:55

回答

0

爲什麼你就不能保存順序你通過每列循環?

for(var i:int = 0; i < dataGrid.columns.size; i++) 
{ 
    var column:DataGridColumn = dataGrid.columns[i]; 
    arr.push({column.visible, column.width, i}); 
} 
+0

mmm ..不清楚我如何在那裏保存命令...'我'變量剛剛增加1,我怎麼知道如果用戶切換了兩列? – luca 2010-01-11 18:02:23

1

在我來說,我已經通過標題名稱保存順序(我做你的DataGrid中始終具有相同的列頭名的假設)。

 for (var n:Number = 0; n< datagrid.columns.length; n++) 
     { 
      var thiscol:DataGridColumn = DataGridColumn(datagrid.columns[n]); 
      colArray.addItem(thiscol.headerText); 
     } 

然後我就可以通過檢索列標題的有序列表,並根據需要交換的數據網格列的位置恢復列的順序。

 for (var n:Number = 0; n < colArray.length; n++) 
     { 
      moveColumnTo(String(colArray.getItemAt(n)), n); 
     } 

我已經定義了一個函數moveColumnTo()來執行切換。

 private function moveColumnTo(columnName:String, columnIndex:Number):void 
     { 
      // Find current column position 
      var i:Number = -1; 
      for (var n:Number = 0; n < datagrid.columns.length; n++) 
      { 
       if (DataGridColumn(datagrid.columns[n]).headerText == columnName) 
       { 
        i = n; 
        break; 
       } 
      } 

      if (i == -1 || i == columnIndex) return; // Don't shift column 

      this.mx_internal::shiftColumns(i, columnIndex); // Shift column to required position 
     }