2017年5月26日金曜日

VB.NETでDataGridViewを使用する時 必ず行っていること

DataGridViewとは?


DataGridViewコントロールはさまざまな種類のデータ ソースのデータを表形式で表示したり編集したりできる
又、データ ソースをバインドせずに動作させることもできる
拡張性に優れていてカスタマイズに柔軟なコントロールである


DataGridViewはエンドユーザーが形状等を操作できる


エンドユーザーがDataGridViewを装備したプログラムを実行した場合、表の幅や高さ、並び替え等の形状等の変更が可能である
時には便利だがプログラムの仕様上、そのような動作を制限しる必要が出てくる

ここでは、エンドユーザーによる操作の制限といくつかの機能、カスタマイズの一部を紹介します


ヘッダーの幅・高さの変更禁止する


Me.DataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
Me.DataGridView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing


セルの幅や高さを変更を禁止する


Me.DataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
Me.DataGridView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing


並び替え(ソート)を禁止する


For Each c As DataGridViewColumn In Me.DataGridView.Columns
    c.SortMode = DataGridViewColumnSortMode.NotSortable
Next c


複数行の選択を禁止する


Me.DataGridView.MultiSelect = False


列ヘッダーの文字列設定


Me.DataGridView.Columns(0).HeaderText = "コード"
Me.DataGridView.Columns(1).HeaderText = "名称"


列ヘッダーのスタイル設定


Me.DataGridView.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
Me.DataGridView.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter


行ヘッダー幅設定


Me.DataGridView.RowHeadersWidth = 20


列幅設定


Me.DataGridView.Columns(0).Width = 40
Me.DataGridView.Columns(1).Width = 140


セルの書式設定


Me.DataGridView.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
Me.DataGridView.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight


データソースの列名割り付け


Me.DataGridView.Columns(0).DataPropertyName = "CODE"
Me.DataGridView.Columns(1).DataPropertyName = "NAME"


DataGridViewにテーブルを表示


Dim ad As New SqlClient.SqlDataAdapter
Dim ds As New DataSet
Dim sql As String

sql = ""
sql &= "SELECT"
Sql &= "        列名1,"
sql &= "        列名2"
sql &= "    FROM"
sql &= "        テーブル名"
ad = New SqlClient.SqlDataAdapter(sql, cnSring)
ad.Fill(ds)
Me.DataGridView.DataSource = ds.Tables(0)
ds.Dispose()
ad.Dispose()


DataGridViewでEnterキー


DataGridViewでEnterキーを押したらTabキーと同様の動作、次のフィールドにフォーカスを移す方法です
クラスを作成して、ビルド、又はリイルドしたらルールボックスにカスタムDataGridViewとして現れ、通常のDataGridViewのように使用できます
Public Class MyDataGridView
    Inherits DataGridView

    Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
        If (keyData And Keys.KeyCode) = Keys.Enter Then
            Return Me.ProcessTabKey(keyData)
        Else
            Return MyBase.ProcessDialogKey(keyData)
        End If

    End Function

    Protected Overrides Function ProcessDataGridViewKey(ByVal e As KeyEventArgs) As Boolean
        If e.KeyCode = Keys.Enter Then
            Return Me.ProcessTabKey(e.KeyCode)
        Else
            Return MyBase.ProcessDataGridViewKey(e)
        End If
    End Function
End Class
ツールボックスに「MyDataGridView」コントロールが表示される