有没有办法让我的程序记住列重新排序的方式,所以当重新打开应用程序时,它会以与关闭表单时相同的方式对它们进行排序。我找不到任何属性。
感谢。
答案 0 :(得分:2)
假设您正在讨论Windows窗体DataGridView,我不知道任何属性会自动为您执行此操作。我想你可以通过处理ColumnDisplayIndexChanged事件来设计一个非常简单的方案。每当用户更改列的顺序时,将触发此事件,然后您可以将列顺序保存在XML文件中。首次使用DataGridView创建表单时,您需要从文件中读取数据并为每列设置正确的DisplayIndex。
希望有所帮助,
-Dan
答案 1 :(得分: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());
}
答案 2 :(得分:1)
如果您不想编写自己的逻辑,可以使用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++;
}
}
}
答案 3 :(得分: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
这很容易,并且已经将这些设置导入我的新版本。我即将添加 最终用户可以根据需要自定义列标题的能力。