たぶん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 件のコメント:
コメントを投稿