2008年2月4日月曜日

ロジックからCellの値を設定しても画面に反映しない?

たぶんDataGridViewを触りはじめでよくひっかかるであろう話題がコレ。
プログラムからは、DataGridView.Rows(Y).Cells(X).Value = "なにがし"とかやっているのに、
画面上では全く反映されていない、というヤツ。

これもわかってしまうと簡単で・・・。
今現在アクティブなのが編集コントロールだから
なんだよね。

つまるところ、セルの値は変更されているんだけど編集コントロール側の値が変更されていないので、画面上ではなにも変更されていないように見えるわけで。
んじゃあどうするか、と言われると・・・セルの値が変更された際は編集コントロールの値も変更させればOKなわけで。

If (Me.IsCurrentCellInEditMode) AndAlso _
   (e.RowIndex = Me.CurrentCell.RowIndex) AndAlso _
   (e.ColumnIndex = Me.CurrentCell.ColumnIndex) Then
    If Me.EditingControl IsNot Nothing Then
        With DirectCast(Me.EditingControl, System.Windows.Forms.IDataGridViewEditingControl)
            If Me.CurrentCell.Value IsNot Nothing Then
                .EditingControlFormattedValue = Me.CurrentCell.Value
            End If
        End With
    End If
End If

CellValueChangedイベントとか、OnCellValueChangedメソッドでこんな風にしてあると、どこかからCellの値を操作したタイミングで編集コントロール側の値(EditingControlFormattedValueプロパティ)を書き換えます。ただし、上のサンプルはまだまだ考慮しないといけない点が抜けているので、そのあたりは手を加える必要がありますねぇ。
Null(Nothing)だったらどうするか、とかそういった点は、あえて実装していないということで言い張っていますw

0 件のコメント:

コメントを投稿