PageLastUpdate:2007-11-19/today:
- /yesterday:
-
DataGridViewの拡張クラス。まずは列の位置、幅、表示をユーザー設定として保存/読み出しするメソッドから。
読み出しを自動化したかったんですが、Newを拡張するとデザイナからの設定のほうが後なのでうまくいきません。
保存を自動化したかったんですが、DisposeだとすでにDataColumnが破棄されていてNothingを喰らいます(苦)。
LoadColumnStateはForm_Loadで、SaveColumnStateはForm_Closingで呼ぶのがよいでしょう。
誰かよいタイミングを知っていたら教えてください。
今後の予定
- 列の表示状態を制御できるなんらかのインターフェースの供給
- CSVやTAB出力機能の供給
- 各機能のコンテキストメニューへの供給
など。なんかネタを振ってくれる人がいれば拡張するかもしれません。
Option Strict On
Imports System.IO
Public Class DataGridViewEx
Inherits DataGridView
Public Sub SaveColumnState()
Try
If Directory.Exists(Application.UserAppDataPath) = False Then
Directory.CreateDirectory(Application.UserAppDataPath)
End If
Dim savepath As String = Path.Combine( _
Application.UserAppDataPath, _
"DataGridEx.ColumnState." & Me.Name)
Dim dt As New DataTable(Me.Name)
dt.Columns.Add("Name", Type.GetType("System.String"))
dt.Columns.Add("Width", Type.GetType("System.Int32"))
dt.Columns.Add("DisplayIndex", Type.GetType("System.Int32"))
dt.Columns.Add("Visible", Type.GetType("System.Boolean"))
For Each Column As DataGridViewColumn In Me.Columns
Dim row As DataRow = dt.NewRow
row("Name") = Column.Name
row("Width") = Column.Width
row("DisplayIndex") = Column.DisplayIndex
row("Visible") = Column.Visible
dt.Rows.Add(row)
Next
dt.WriteXml(savepath)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
Public Sub LoadColumnState()
Try
Dim loadpath As String = Path.Combine( _
Application.UserAppDataPath, _
"DataGridEx.ColumnState." & Me.Name)
If File.Exists(loadpath) = False Then Exit Sub
Dim dt As New DataTable(Me.Name)
dt.Columns.Add("Name", Type.GetType("System.String"))
dt.Columns.Add("Width", Type.GetType("System.Int32"))
dt.Columns.Add("DisplayIndex", Type.GetType("System.Int32"))
dt.Columns.Add("Visible", Type.GetType("System.Boolean"))
dt.ReadXml(loadpath)
dt.DefaultView.Sort = "DisplayIndex"
For Each drv As DataRowView In dt.DefaultView
Dim column As DataGridViewColumn = Me.Columns(drv.Row("Name").ToString)
column.DisplayIndex = CType(drv.Row("DisplayIndex"), Int32)
column.Width = CType(drv.Row("Width"), Int32)
column.Visible = CType(drv.Row("Visible"), Boolean)
Next
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
End Class
comment
このページの記述で聞きたいこととか間違ってることとかありましたらコメントを。
- CSVやTAB出力機能の供給の予定は? -- (Tarou) 2008-01-11 11:54:43
- こんにちは。手元にはあるんですがまだあげてませんね。来週にでも追加しときましょうか。 -- (memo77) 2008-01-11 12:29:51
最終更新:2007年11月19日 22:22