有沒有辦法讓我的程序記住列重新排序的方式,因此當應用程序重新打開時,它會按照與關閉應用程序時相同的方式來命令它們形成。我找不到任何屬性。保存我的DataGridView的「AllowUserToOrderColumns」的設置
謝謝。
有沒有辦法讓我的程序記住列重新排序的方式,因此當應用程序重新打開時,它會按照與關閉應用程序時相同的方式來命令它們形成。我找不到任何屬性。保存我的DataGridView的「AllowUserToOrderColumns」的設置
謝謝。
假設您正在討論Windows窗體DataGridView,我不知道任何屬性會自動爲您執行此操作。不過,我想你可以通過處理ColumnDisplayIndexChanged事件來設計一個非常簡單的方案。無論用戶何時更改列的順序,都會觸發此事件,然後您可以將列順序保存在XML文件中。首次使用DataGridView創建表單時,需要從文件讀取數據併爲每列設置適當的DisplayIndex。
希望幫助,
-Dan
如果你不想寫自己的邏輯,你可以使用一個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++;
}
}
}
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());
}
我知道這答案很晚,但也許會幫助有需要的人。
我發現工作 - 非常容易和保存爲設置
我做了一個新的類庫項目添加到我的解決方案,並把它命名爲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
這很容易,而且我一直在將這些設置導入到我的新版本中。我即將爲最終用戶添加 的能力,以自定義將列標題命名爲任何他們想要的內容。
謝謝丹。你知道這些列設置保存在哪裏嗎? – JimDel 2009-06-29 14:33:34
您實際上必須自己創建具有列設置的文件。我想也許你可以創建一個簡單的XML文件來存儲每列的DisplayIndex。像這樣(遺憾的壞格式化): <列索引= 「1」 的DisplayIndex = 「1」/> <列索引= 「2」 的DisplayIndex = 「4」/> <列索引=」 3「displayIndex =」3「/> 然後,您可以將該文件保存在項目的Settings文件夾中,並讀取/寫入文件需要。 –
devuxer
2009-06-29 16:57:40