2

コレクションにバインドされたグリッドがあります。なんらかの理由で、グリッドで何らかのアクションを実行すると、グリッドが更新されません。

状況: グリッド内のボタンをクリックすると、同じ行にある値が増加します。クリックすると、デバッグして値が増加するのを確認できますが、値はグリッドで変化しません。しかし、ボタンをクリックしてウィンドウを最小化して復元すると、値が更新されます...以前のように値を更新するにはどうすればよいですか?

更新 これは解決されていませんが、ここで最良の回答を受け入れました。

データがデータベースからのものであり、キャッシュからのものではない場合、通常どおり機能するため、解決されていません。オブジェクトはシリアル化され、イベントが失われるプロセスをスローします。これが私がそれらを元に戻す理由であり、それらとやり取りできるため、私が知っていることで機能しますが、不明な理由でグリッドの更新では機能しないようです.

4

3 に答える 3

2

コントロールからデータソースへ、およびデータソースからコントロールへのバインディングを双方向にするには、次の 2 つの方法のいずれかで、プロパティ変更通知イベントを実装する必要があります。

  • INotifyPropertyChangedインターフェイスを実装し、プロパティが変更されたときにイベントを発生させます。

    public string Name 
    {
      get
      {
        return this._Name;
      }
      set
      {
        if (value != this._Name)
        {
            this._Name= value;
            NotifyPropertyChanged("Name");
        }
      }
    }
    
  • 変更されたときにコントロールに通知する必要があるすべてのプロパティに対して、変更されたイベントを実装します。イベント名は、 PropertyName Changedの形式である必要があります。

    public event EventHandler NameChanged;
    
    public string Name 
    {
      get
      {
        return this._Name;
      }
      set
      {
        if (value != this._Name)
        {
            this._Name= value;
            if (NameChanged != null) NameChanged(this, EventArgs.Empty);
        }
      }
    }
    

    *注として、コントロールはデータソースから値を再読み込みするため、プロパティ値はウィンドウの最大化後に正しい値になります。

于 2008-09-23T00:35:37.573 に答える
0

更新コードで DataBind を呼び出す必要があるようです。

于 2008-09-22T22:59:17.493 に答える
0

コレクションとグリッドの間で BindingSource オブジェクトを使用しています。通常、私は何も呼び出す必要はありません。

于 2008-09-22T23:08:17.580 に答える