なにやらかにやらメモ

DataGridViewEx


PageLastUpdate: 2007-11-19 /today: - /yesterday: -

DataGridViewEx

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
名前:
コメント:

すべてのコメントを見る


更新履歴

取得中です。