2009-06-28 10 views

Antwort

2

Angenommen, Sie sprechen von einem Windows Forms-DataGridView, mir ist keine Eigenschaft bekannt, die dies automatisch für Sie erledigen würde. Ich denke, dass Sie ein ziemlich einfaches Schema entwickeln können, indem Sie das ColumnDisplayIndexChanged Event behandeln. Wenn der Benutzer die Reihenfolge der Spalten ändert, wird dieses Ereignis ausgelöst. Anschließend können Sie die Spaltenreihenfolge in einer XML-Datei speichern. Wenn Sie das Formular zum ersten Mal mit DataGridView erstellen, müssen Sie die Daten aus der Datei lesen und für jede Spalte den richtigen DisplayIndex festlegen.

Hoffnung, dass

-Dan

+0

Danke Dan. Wissen Sie, wo diese Spalteneinstellungen gespeichert sind? – JimDel

+0

Sie müssen die Datei mit den Spalteneinstellungen selbst erstellen. Ich dachte, Sie könnten vielleicht eine einfache XML-Datei erstellen, die den DisplayIndex für jede Spalte speichert.So etwas wie dies (sorry für die schlechte Formatierung): Dann könnten Sie diese Datei einfach in einem Einstellungsordner in Ihrem Projekt speichern und in die Datei lesen/schreiben erforderlich. – devuxer

1

Wenn Sie Ihre eigene Logik nicht wollen, zu schreiben, hilft Ihnen die Möglichkeit eines Datatable verwenden können, lesen/schreiben sie Daten oder das Schema zu einer XML-Datei ist.
Wenn Sie Ihr Formular schließen, nur eine Datatable erstellen, fügen Sie Spalten für jede Datagridview in der richtigen Reihenfolge und beim Start nur dieses Schema laden und die Reihenfolge der Spalten fest:

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

Wenn Sie auf ältere Fragen antworten (insbesondere 3 Jahre alte Fragen), sollten Sie versuchen, einige zusätzliche Details zu Ihrer Lösung anzugeben. Bitte erläutern Sie Ihren Code, einige Gründe, warum sich Ihre Lösung von den anderen unterscheidet, oder erläutern Sie, warum Ihre Lösung hilfreicher ist als die anderen bereitgestellten Lösungen. –

+0

Sie beantworten die Eigenschaften, die für die Bestimmung der Reihenfolge verwendet werden, aber nicht Beantworten Sie die Frage, wie Sie diese Einstellungen speichern und wiederherstellen können. – BenR

0

ich das wissen Antwort kommt sehr spät, aber vielleicht hilft es jemandem in Not.

Was ich zur Arbeit gefunden - Sehr einfach und spart als Einstellungen

ich ein neues Klassenbibliotheksprojekt zu meiner Lösung hinzuzufügen gemacht und es MySettingTypes benannt. Ich habe folgende Klasse hinzugefügt.

<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 

End Class

das MySettingTypes Rebuild Projekt als Referenz zu Ihrem Datagridview-Projekt hinzufügen . In dem Fenster, in dem sich Ihr Projekt befindet, können Sie den folgenden Code zum Speichern und Laden hinzufügen.

Gehen Sie zu Ihren Projekteinstellungen und fügen Sie eine neue Einstellung namens YourDGVSettingsEntry hinzu. Wenn Sie den Typ auswählen, gehen Sie zu BROWSE und suchen Sie DataGridViewColumnSetting unter MySettingTypes.

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 

Es ist so einfach und habe diese Einstellungen in meine neuen Versionen importiert. Ich bin im Begriff, die Fähigkeit für den Endbenutzer hinzuzufügen, die Spaltenüberschriften nach Belieben zu benennen.

Verwandte Themen