2017-12-29 99 views
1

私は自分のオブジェクトモデル内のオブジェクトの値を自動的に更新するように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を自動更新する必要があります。

ステップが間違っているか間違っていますか?

+0

'DataGridView.Refresh()'はデータに関する何もしません。コントロールを再描画するだけです。私は 'aryJoints'が' Joint'クラスの配列であると仮定します。あなたが 'BindingSource'でそれをラップするならば、' INotifyPropertyChanged'を実装する必要はありません。ユーザーは現在のセルのみを編集できるので、データの変更が表示されないことを尋ねていますか? – Plutonix

+0

>>私はaryJointsがその共同クラスの配列であると仮定しますか? はい、正しいです。 データはコードによって更新されています。ユーザーは、DataGridViewのデータを変更することはできません。たとえば、ユーザーがジョイントクラスのデータを変更するスクロールバーを移動すると、そのデータがDataGridViewに表示されるはずですが、現在選択されている行のみが更新されます。 – RobotGuy

+0

私は追加する必要があります、データはまた、他のソースから更新されます。他の形式。他のルーチンなどオブジェクトモデルではすべて更新されているジョイントの7行があります。 DataGridViewは自動的にそれらを更新する必要があります。ありがとう。 – RobotGuy

答えて

0

バインドされた配列を使用する代わりに、BindingListに切り替えようとする上のコメントに示唆されています。私はこの解決策を試して、それが動作します。 DataGridViewは、オブジェクトモデルが値を更新したときに、任意の行で必要に応じて更新されます。だから私はコードでこの変更を実装します:)

関連する問題