Hi all,

Thanks for the help Tracey and Tom, I've tried to do something along  
the lines of what you suggested but keep running up against the  
problem of casting from Object to DataGridColumn.

jake247, your code works pretty well, I think I could probably alter  
it to get what I really want if I work on it a little more (the  
columns may need to be added or removed).

However, I assume you're using a grid without a horizontal scroll  
bar, as I seem to have found a bug in the DataGrid when running your  
code. When it get's to the point where the width is set on the newCol  
for a column that is off to the right and not visible until the  
scrollbar is used, it complains about a missing property because it's  
internally trying to reference an element in the visibleColumns array  
which isn't there. I need to either fix this in the DataGrid source  
or find a work around.

Ian


On 24 May 2007, at 20:38, <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> wrote:

> Ask and ye shall receive ... we solved this exact problem about a  
> month ago ...
> ---------------------------------------------------------------------- 
> ---
> //  Save grid settings to shared object
>                       public function saveGridSettings():void {
>                               var name:String = lineItemGrid.name;
>                               var gWidth:int = lineItemGrid.width;
>                               var cols:Array = new Array();
>                               var savedLastSort:String = lastSort;
>                               var savedReversed:Boolean = reversed;
>                               for (var i:int = 0; i < 
> lineItemGrid.columns.length; i++) {
>                                       cols[i] = lineItemGrid.columns[i];      
>                               }
>                               
>                               // Write grid data to shared object
>                               lineItemGridSO = 
> SharedObject.getLocal("gridData", "/");
>                               lineItemGridSO.data.name = name;
>                               lineItemGridSO.data.gridWidth = gWidth;
>                               lineItemGridSO.data.lastSort = savedLastSort;
>                               lineItemGridSO.data.reversed = savedReversed;
>                               lineItemGridSO.data.gridCols = new Array();
>                               lineItemGridSO.data.gridCols = cols;
>                               lineItemGridSO.flush(); 
>                       }
>                       
>                       // Get grid settings from shared object
>                       public function getGridSettings():void {
>                               lineItemGridSO = 
> SharedObject.getLocal("gridData", "/");                
>                               if (lineItemGridSO.data.name != undefined) {
>                                       lastSort = 
> lineItemGridSO.data.lastSort;        
>                                       var newCols:Array = new Array();
>                                       for (var i:int = 0; i < 
> lineItemGridSO.data.gridCols.length; i+ 
> +) {
>                                               for (var j:int = 0; j < 
> lineItemGrid.columns.length; j++) {
>                                                       if 
> (lineItemGrid.columns[j].dataField ==  
> lineItemGridSO.data.gridCols[i].dataField) {
>                                                               var 
> newCol:DataGridColumn = DataGridColumn 
> (lineItemGrid.columns.splice(int(j), 1)[0]);
>                                                               newCol.width = 
> lineItemGridSO.data.gridCols[i].width;
>                                                               
> newCols.push(newCol);
>                                                       }
>                                               }
>                                       }
>                                       newCols.concat(lineItemGrid.columns);
>                                       lineItemGrid.columns = newCols;
>                                                                       }
>                       }
> ---- "Ian M. Jones" <[EMAIL PROTECTED]> wrote:
>> Hi all,
>>
>> I'm trying to set up a simple way to save a user's DataGrid column  
>> setup
>> to a local SharedObject, and then retrieve those settings when  
>> they next
>> run the application.
>>
>> Saving them seems to have been pretty simple:
>>
>> public function savePreferences():void {
>>     var prefs:SharedObject = SharedObject.getLocal("Preferences");
>>     var defaultColumns:Array = myDataGrid.columns;
>>     prefs.data.defaultColumns = defaultColumns;
>>     prefs.flush();
>> }
>>
>> That works, I can see the objects in the Preferences.sol file, but I
>> haven't found a way of setting the grid's columns after reading it  
>> back
>> in.
>>
>> I've tried reading back into an array and then setting the columns
>> property to the array.
>> I've tried iterating through the array with a for each casting the  
>> results
>> to a DataGridColumn, appending to an ArrayCollection and then finally
>> setting the DataGrid's columns to the ArrayCollection.toArray,  
>> that didn't
>> get very far.
>> I've tried binding the DataGrid's columns property to an Array,  
>> and then
>> setting that array to the prefs.data.defaultColumns.
>>
>> Nothing seems to work, the app generally seems to hang at the  
>> point I try
>> to set the columns property.
>>
>> Is there a kind soul that can point me in the right direction?
>>
>> Thanks,
>> -- 
>> Ian M. Jones
>> ________________________________________
>> IMiJ Software
>> http://www.imijsoft.com
>> http://www.ianmjones.net (blog)
>>
>
>

Reply via email to