2009-06-28 56 views

回答

2

假設您正在討論Windows窗體DataGridView,我不知道任何屬性會自動爲您執行此操作。不過,我想你可以通過處理ColumnDisplayIndexChanged事件來設計一個非常簡單的方案。無論用戶何時更改列的順序,都會觸發此事件,然後您可以將列順序保存在XML文件中。首次使用DataGridView創建表單時,需要從文件讀取數據併爲每列設置適當的DisplayIndex。

希望幫助,

-Dan

+0

謝謝丹。你知道這些列設置保存在哪裏嗎? – JimDel 2009-06-29 14:33:34

+0

您實際上必須自己創建具有列設置的文件。我想也許你可以創建一個簡單的XML文件來存儲每列的DisplayIndex。像這樣(遺憾的壞格式化): <列索引= 「1」 的DisplayIndex = 「1」/> <列索引= 「2」 的DisplayIndex = 「4」/> <列索引=」 3「displayIndex =」3「/> 然後,您可以將該文件保存在項目的Settings文件夾中,並讀取/寫入文件需要。 – devuxer 2009-06-29 16:57:40

1

如果你不想寫自己的邏輯,你可以使用一個DataTable的能力,讀/寫數據或模式到XML文件。
如果你閉上你的形式,只需要創建一個數據表,以正確的順序,並在啓動時添加列每個DataGridView的只是加載這個模式,並設置列的順序:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
    } 

    // Save order 
    private void button1_Click(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable("table"); 

     var query = from DataGridViewColumn col in dataGridView1.Columns 
        orderby col.DisplayIndex 
        select col; 

     foreach (DataGridViewColumn col in query) 
     { 
      dt.Columns.Add(col.Name); 
     } 

     dt.WriteXmlSchema(@"c:\temp\columnorder.xml"); 
    } 

    // Restore order 
    private void button2_Click(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     dt.ReadXmlSchema(@"c:\temp\columnorder.xml"); 

     int i = 0; 
     foreach (DataColumn col in dt.Columns) 
     { 
      dataGridView1.Columns[col.ColumnName].DisplayIndex = i; 
      i++; 
     } 
    } 
} 
2
  var query = from DataGridViewColumn col in dataGridView1.Columns 
         orderby col.DisplayIndex 
         select col; 

      foreach (DataGridViewColumn col in query) 
      { 

       MessageBox.Show(col.HeaderText); 
       MessageBox.Show(col.DisplayIndex.ToString()); 
      } 
0

我知道這答案很晚,但也許會幫助有需要的人。

我發現工作 - 非常容易和保存爲設置

我做了一個新的類庫項目添加到我的解決方案,並把它命名爲MySettingTypes。 我添加了下面的類。

<Serializable()> Public Class DataGridViewColumnSetting 
Property ColumnNames As List(Of String) 
Property ColumnDisplayIndex As List(Of Integer) 
Property ColumnVisiblility As List(Of Boolean) 
Property ColumnSize As List(Of Integer) 

Public Sub New() 
    ColumnDisplayIndex = New List(Of Integer) 
    ColumnNames = New List(Of String) 
    ColumnSize = New List(Of Integer) 
    ColumnVisiblility = New List(Of Boolean) 
End Sub 

末級

重建MySettingTypes項目 其添加爲您的datagridview項目的參考。 在存放項目的窗口中,您可以添加保存和加載的休閒代碼。

轉到您的項目設置並添加一個名爲YourDGVSettingsEntry的新設置。 選擇類型時,轉到BROWSE並在MySettingTypes下找到DataGridViewColumnSetting。

Private Sub loadSettings() 
    If Not IsNothing(My.Settings.YourDGVSettingsEntry) Then 
     Dim s As MySettingTypes.DataGridViewColumnSetting = My.Settings.YourDGVSettingsEntry 
     Dim pos As Integer = 0 
     For Each ColumnName As String In s.ColumnNames 
      Try 
       Me.YourDataGridView.Columns(ColumnName).DisplayIndex = s.ColumnDisplayIndex(pos) 
       Me.YourDataGridView.Columns(ColumnName).Width = s.ColumnSize(pos) 
       Me.YourDataGridView.Columns(ColumnName).Visible = s.ColumnVisiblility(pos) 
      Catch ex As Exception 
      End Try 
      pos = pos + 1 
     Next 

    Else 
     My.Settings.YourDGVSettingsEntry = New MySettingTypes.DataGridViewColumnSetting 
     Me.saveSettings() 
    End If 
End Sub 

Private Sub saveSettings() 
    Dim x As New MySettingTypes.DataGridViewColumnSetting 
    For Each c As DataGridViewColumn In YourDataGridView.Columns 
     x.ColumnNames.Add(c.Name) 
     x.ColumnDisplayIndex.Add(c.DisplayIndex) 
     x.ColumnSize.Add(c.Width) 
     x.ColumnVisiblility.Add(c.Visible) 
     My.Settings.YourDGVsettingsEntry = x 
     My.Settings.Save() 
    Next 

End Sub 

Private Sub yourDGVForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing 
    'txtResultsCount.Text = "Saving settings" 
    saveSettings() 
End Sub 

Private Sub yourDGVForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    ' myparent = Me.MdiParent 
    loadSettings() 
    'Setup() 


End Sub 

這很容易,而且我一直在將這些設置導入到我的新版本中。我即將爲最終用戶添加 的能力,以自定義將列標題命名爲任何他們想要的內容。