0

私はWPFが初めてで、数日間質問に対する答えが見つかりません。便利なリンクを教えてください...

データグリッドにバインドされたデータテーブルがあります。

public  class Customers:INotifyPropertyChanged
  private DataTable _contacts;
      public DataTable Contacts
      {
          get { return _contacts; }

          set
          {
              _contacts = value;
              OnPropertyChanged("Contacts"); 
          }
      }
       public Customers() 
      {
          RaisePropertyChanged("Contacts");
      }
       public event PropertyChangedEventHandler PropertyChanged;
      public void OnPropertyChanged(string propertyName)
      {
          if (PropertyChanged != null)
          {
              PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
          }
      }
      public void RaisePropertyChanged(string propertyName)
      {
          if (this.PropertyChanged != null)
              this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
          if(string.Compare(propertyName,"Contacts")==0)
          {
             var CustomerContacts = new CustomerContactsTable();
                                  if (Id != null)
                                      CustomerContacts.GetTableByCustomerId(Id);
                                  Contacts = CustomerContacts;
                                  //..here is logic for other properties..
          }         

      }

そして、ここにxamlがあります:

<DataGrid ItemsSource="{Binding Path=Contacts}" TargetUpdated="dgContacts_TargetUpdated">
            <DataGrid.Columns>

                <DataGridTextColumn Binding="{Binding Name,NotifyOnTargetUpdated=True}" ClipboardContentBinding="{x:Null}" />
                <DataGridTextColumn Binding="{Binding TelNo,NotifyOnTargetUpdated=True}" ClipboardContentBinding="{x:Null}" />                
            </DataGrid.Columns>
        </DataGrid>

データの更新をデータベースに実装する方法がよくわかりません。指定されたデータ行の 2 つのリストを取得したい: 更新された行 (内部の新しい行内) を含むリストと、削除された行を含むリスト。セルではなく、行全体で作業したい。また、DataTableAdapter は使用しません。現在、datagrid を変更しても、sourcecollection の更新は提供されません。どのイベントを使用するとよいでしょうか (OnTargetUpdated、RowEditEnding など)? そんなに叩かないでください。前もって感謝します!

4

2 に答える 2

2

データセットから変更または削除された行を取得できます

var modifiedRows = Contacts.GetChanges(DataRowState.Modified);
var deletedRows = Contacts.GetChanges(DataRowState.Deleted);

別の方法として、INotifyPropertyChanged を実装する新しい ContactViewModel クラスを作成することを検討してください。このクラスをデータテーブルの各行の表現として使用します。

于 2013-06-21T17:01:05.227 に答える
1

挿入または削除を通知するには、DataTable の代わりに ObservableCollection を Datagrid にバインドする方がよいと思います。

以下のリンクでは、同様の問題を解決するために採用したソリューションを示していますが、さらに、バインドされたオブジェクトのプロパティの値を更新する必要もありました。それが役に立てば幸い...

アイテムの変更を更新する特殊な ObservableCollection を使用した Datagrid Binding

オスカー

于 2013-06-21T14:42:09.563 に答える