ListView の列ヘッダーの順序と幅を保存・復元するやり方です。
MEMO
WPF の ListView の話題です。Forms の ListView ではないので注意してください。
たとえばこんな xaml の場合。
<ListView> <ListView.View> <GridView> <GridViewColumn Width="50"> <GridViewColumnHeader Content="有効" /> <GridViewColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding IsEnabled}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Width="250" DisplayMemberBinding="{Binding MailAddress}"> <GridViewColumnHeader Content="メールアドレス" /> </GridViewColumn> <GridViewColumn Width="100"> <GridViewColumnHeader Content="メモ" /> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Memo}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView>
ダイアログのイメージはこんな感じ。(見やすくするために、xaml のほうからはタグをいろいろ省略してあります)
列順と列幅の取得(保存)のコード。
Dim oGridView As GridView = oListView.View Dim oCols As GridViewColumnCollection = oGridView.Columns For Each oCol As GridViewColumn In oCols '各列の名前と幅を好きなように保存↓ 'DirectCast(oCol.Header, GridViewColumnHeader).Content.ToString 'oCol.Width.ToString Next
列順と列幅の復元のコード。
Dim oGridView As GridView = oListView.View Dim oCols As GridViewColumnCollection = oGridView.Columns Dim IndexAfter As Integer = 0 For Each ColInfoArray As String() In ColNameWidthList '← 保存しておいた列名・列幅のリストや配列 Dim ColName As String = ColInfoArray(0) Dim ColWidth As Integer = ColInfoArray(1) 'このへん↑は好きなやり方で。 Dim bFound As Boolean = False Dim IndexBefore As Integer = 0 For i As Integer = IndexAfter To oCols.Count -1 Dim oCol As GridViewColumn = oCols(i) if DirectCast(oCol.Header, GridViewColumnHeader).Content.ToString().Equals(ColName) Then bFound = True IndexBefore = i oCol.Width = ColWidth Exit For End If Next If bFound = True Then oCols.Move(IndexBefore, IndexAfter) IndexAfter += 1 End If Next