LoginSignup
0
2

More than 3 years have passed since last update.

.NET DataGridViewのカスタムセルを実装する場合の注意点

Last updated at Posted at 2019-08-18

TL;DR(要約)

  • DataGridViewのカスタムセルを実装する場合にはまりやすい点
  • 関連付けるコントロール自体がユーザーコントロールの場合には、入力処理が反映されないことがある

課題1

課題:キーボードで移動した場合に、独自コントロールの処理が反映されない

独自コントロールで、Validatingイベントで、編集が終わった後に、値チェック(最大、最小)と書式の処理を行っていた。

しかし、キーボードで移動した場合は、Validatingイベントが発生するタイミングが異なるため、独自コントロールから、DataGridViewに値が反映されなかった。

マウスで別セルを指定して移動した場合には反映された。

マウスで別セルを指定して移動

イベント Me.Textの値
OnTextChanged 1
GetEditingControlFormattedValue 1
OnTextChanged 12
OnTextChanged 123
OnLeave 123
OnTextChanged 123.00
OnValidating 123.00
GetEditingControlFormattedValue 123.00
GetEditingControlFormattedValue 123.00

Enterキーで移動

イベント Me.Textの値
OnTextChanged 1
GetEditingControlFormattedValue 1
OnTextChanged 12
OnTextChanged 123
GetEditingControlFormattedValue 123
GetEditingControlFormattedValue 123
OnLeave 123
OnTextChanged 123.00
OnValidating 123.00

解決策:OnValidatingイベントで上書き

    Protected Overrides Sub OnValidating(e As CancelEventArgs)
        MyBase.OnValidating(e)

        _DataGridView.CurrentCell.Value = Me.Text
    End Sub

上記の_DataGridViewは、EditingControlDataGridViewでセットされたもの。詳しくは、リソース参照。

   '編集するセルがあるDataGridView
    Public Property EditingControlDataGridView() As DataGridView _
        Implements IDataGridViewEditingControl.EditingControlDataGridView

        Get
            Return Me._DataGridView
        End Get
        Set(ByVal value As DataGridView)
            Me._DataGridView = value
        End Set
    End Property

課題2

課題:DataGridViewの表示書式を既定で変更したい

通貨型セルなどを実装した場合、既定で右寄せとしたい。

解決策:カスタム列のコンストラクタで指定する

既定値を設定するなどの方法があるが、カスタム列のコンストラクタで実装する方法が、紛れがない。(汎用性はなくなるが)

    Public Sub New()
        MyBase.New(New CcOldDataGridViewCurrencyCell())

        '初期化処理があればここに記載
        '右寄せ
        Me.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        Me.DefaultCellStyle.Format = "#,0"
    End Sub

リソース

■DataGridViewにMaskedTextBoxを表示する
https://dobon.net/vb/dotnet/datagridview/maskedtextboxcolumn.html

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2