How to save column order and column width preferences in WinForms GridControl and GridDataBoundGrid?
Save column order and column width
When a GridControl has serialization support through its GridModel.LoadBinary / GridModel.SaveBinary or GridModel.LoadSoap / GridModel.SaveSoap. Currently this is not supported in GridDataBoundGrid.
When you want to save column position and widths, then use .NET Frameworks serialization support.
C#
void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { //Serialize out the row heights & column widths IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream("MySizes.bin", FileMode.Create, FileAccess.Write, FileShare.None); //Handle the mapping names GridBoundColumnsCollection col = (GridBoundColumnsCollection)this.gridDataBoundGrid1.GridBoundColumns; if(col.Count == 0) col = this.gridDataBoundGrid1.Binder.InternalColumns; int nCols = col.Count; string[] a = new string[nCols]; int i = 0; foreach (GridBoundColumn c in col) a[i++] = c.MappingName; formatter.Serialize(stream, a); formatter.Serialize(stream, this.gridDataBoundGrid1.Model.ColWidths.Dictionary); stream.Close(); } catch (Exception ex) { } } private void Form1_Load(object sender, EventArgs e) { initializegrid(); } public void initializegrid() { if (File.Exists("MySizes.bin")) { try { IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream("MySizes.bin", FileMode.Open, FileAccess.Read, FileShare.None); try { this.gridDataBoundGrid1.BeginUpdate(); //handle the mappingnames GridBoundColumnsCollection col = (GridBoundColumnsCollection)this.gridDataBoundGrid1.GridBoundColumns.Clone(); if (col.Count == 0) col = this.gridDataBoundGrid1.Binder.InternalColumns; string[] a = (string[])formatter.Deserialize(stream); this.gridDataBoundGrid1.GridBoundColumns.Clear(); foreach (string s in a) { GridBoundColumn c = col[s]; this.gridDataBoundGrid1.GridBoundColumns.Add(c); } this.gridDataBoundGrid1.Model.ColWidths.Dictionary = (Syncfusion.Windows.Forms.Grid.GridRowColSizeDictionary)formatter.Deserialize(stream); } finally { this.gridDataBoundGrid1.EndUpdate(); this.gridDataBoundGrid1.Refresh(); stream.Close(); } } catch (Exception ex) { } } }
VB
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Try 'Serialize out the row heights & column widths Dim formatter As IFormatter = New BinaryFormatter() Dim stream As Stream = New FileStream("MySizes.bin", FileMode.Create, FileAccess.Write, FileShare.None) 'Handle the mapping names Dim col As GridBoundColumnsCollection = CType(Me.gridDataBoundGrid1.GridBoundColumns, GridBoundColumnsCollection) If col.Count = 0 Then col = Me.gridDataBoundGrid1.Binder.InternalColumns End If Dim nCols As Integer = col.Count Dim a(nCols - 1) As String Dim i As Integer = 0 For Each c As GridBoundColumn In col a(i) = c.MappingName i += 1 Next c formatter.Serialize(stream, a) formatter.Serialize(stream, Me.gridDataBoundGrid1.Model.ColWidths.Dictionary) stream.Close() Catch ex As Exception End Try End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) initializegrid() End Sub Public Sub initializegrid() If File.Exists("MySizes.bin") Then Try Dim formatter As IFormatter = New BinaryFormatter() Dim stream As Stream = New FileStream("MySizes.bin", FileMode.Open, FileAccess.Read, FileShare.None) Try Me.gridDataBoundGrid1.BeginUpdate() 'handle the mappingnames Dim col As GridBoundColumnsCollection = CType(Me.gridDataBoundGrid1.GridBoundColumns.Clone(), GridBoundColumnsCollection) If col.Count = 0 Then col = Me.gridDataBoundGrid1.Binder.InternalColumns End If Dim a() As String = CType(formatter.Deserialize(stream), String()) Me.gridDataBoundGrid1.GridBoundColumns.Clear() For Each s As String In a Dim c As GridBoundColumn = col(s) Me.gridDataBoundGrid1.GridBoundColumns.Add(c) Next s Me.gridDataBoundGrid1.Model.ColWidths.Dictionary = CType(formatter.Deserialize(stream), Syncfusion.Windows.Forms.Grid.GridRowColSizeDictionary) Finally Me.gridDataBoundGrid1.EndUpdate() Me.gridDataBoundGrid1.Refresh() stream.Close() End Try Catch ex As Exception End Try End If End Sub
Samples:
C#: Save_column_width_and_position
VB: Save_column_width_and_position
Conclusion
I hope you enjoyed learning about how to save column order and column width preferences in WinForms GridControl and GridDataBoundGrid.
You can refer to our WPF DataGrid feature tour page to know about its other groundbreaking feature representations. You can also explore our WinForms RibbonControl documentation to understand how to create and manipulate data.
For current customers, you can check out our components from the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to check out our other controls.
If you have any queries or require clarifications, please let us know in the comments section below. You can also contact us through our support forums, Direct-Trac, or feedback portal. We are always happy to assist you!