Сохранение настроек для «AllowUserToOrderColumns» моего DataGridView - PullRequest
1 голос
/ 29 июня 2009

Есть ли способ заставить мою программу запомнить способ переупорядочения столбцов, поэтому при повторном открытии приложения они упорядочивают их так же, как при закрытии формы. Я не могу найти какие-либо свойства для этого.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 29 октября 2012
            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());
             }
2 голосов
/ 29 июня 2009

Предполагая, что вы говорите о Windows Forms DataGridView, я не знаю ни одного свойства, которое бы делало это для вас автоматически.Я думаю, что вы могли бы разработать довольно простую схему, обработав событие ColumnDisplayIndexChanged.Всякий раз, когда пользователь изменяет порядок столбцов, это событие срабатывает, тогда вы можете сохранить порядок столбцов в файле XML.При первом создании формы с помощью DataGridView вам нужно будет прочитать данные из файла и установить соответствующий DisplayIndex для каждого столбца.

Надеюсь, это поможет,

-Dan

1 голос
/ 30 июня 2009

Если вы не хотите писать собственную логику, вы можете использовать возможность DataTable для чтения / записи своих данных или схемы в XML-файл.
Если вы закрываете форму, просто создайте DataTable, добавьте столбцы для каждого 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++;
        }
    }
}
0 голосов
/ 28 августа 2014

Я знаю, что этот ответ приходит очень поздно, но, возможно, он поможет кому-то нуждающемуся.

То, что я нашел для работы - Очень просто и сохраняет как настройки

Я сделал новый проект библиотеки классов для добавления в мое решение и назвал его 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 и найдите DataGridViewColumnSetting в 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

Это так просто, и я импортировал эти настройки в мои новые выпуски. Я собираюсь добавить конечному пользователю предоставляется возможность произвольно именовать заголовки столбцов по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...