私は自分のオブジェクトモデル内のオブジェクトの値を自動的に更新するようにDataGridViewコントロールを取得しています。私はINotifyPropertyChangedのを使用して、オブジェクトモデルでイベントを募集次のコードバインドされたDataGridViewは現在選択されている行を更新するだけです
Dim bs As BindingSource = New BindingSource()
bs.DataSource = aryJoints
DataGridJoints.DataSource = bs
を通じて私のDataGridViewに結合していたオブジェクトの配列を持っています。
Private _GoalPosition As Double
Property GoalPosition() As Double
Get
Return _GoalPosition
End Get
Set(ByVal Value As Double)
_GoalPosition = Value
RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs("GoalPosition"))
End Set
End Property
私は、プロパティaryJointsを更新した場合、同じフォームから(0).GoalPosition: には、以下の私は、次の持っている私の「パブリック・クラス合同」
Implements System.ComponentModel.INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
にそしてGoalPositionプロパティでありますまたは他のフォームの場合、DataGridViewはその行が選択されたときにのみDataGridViewのGoalPositionフィールドを更新します。別の行にいて、変更があった行に移動すると、行は最新の値で更新されます。
私が理解しているように、いったんイベントが発生すると適切なバインディングが行われると、すべてのセルが新しい値で自動更新されるはずです。私はそのセルにいる必要はありませんし、変更を反映するためにフォームにその行が選択されている必要があります。
DataGridJoints.Refresh()を呼び出すと、DataGridViewはすべての値を必要に応じて更新します。しかし、バインドされたデータソースを作成することのポイントは、リフレッシュを呼び出す必要性を避けることです。さまざまな場所からオブジェクトモデルを更新するフォームと操作が数多くあり、さまざまなフォームでDataGridViewを自動更新する必要があります。
ステップが間違っているか間違っていますか?
'DataGridView.Refresh()'はデータに関する何もしません。コントロールを再描画するだけです。私は 'aryJoints'が' Joint'クラスの配列であると仮定します。あなたが 'BindingSource'でそれをラップするならば、' INotifyPropertyChanged'を実装する必要はありません。ユーザーは現在のセルのみを編集できるので、データの変更が表示されないことを尋ねていますか? – Plutonix
>>私はaryJointsがその共同クラスの配列であると仮定しますか? はい、正しいです。 データはコードによって更新されています。ユーザーは、DataGridViewのデータを変更することはできません。たとえば、ユーザーがジョイントクラスのデータを変更するスクロールバーを移動すると、そのデータがDataGridViewに表示されるはずですが、現在選択されている行のみが更新されます。 – RobotGuy
私は追加する必要があります、データはまた、他のソースから更新されます。他の形式。他のルーチンなどオブジェクトモデルではすべて更新されているジョイントの7行があります。 DataGridViewは自動的にそれらを更新する必要があります。ありがとう。 – RobotGuy