我是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>
我不知道如何更好地将数据更新到数据库中。我想获得两个指定数据行列表:列表包含更新的行(在新行内)和列表包含已删除的行。我想整行而不是细胞。而且我没有使用DataTableAdapter。 datagrid中的任何更改都不会立即提供sourcecollection的更新。 最好使用什么事件(OnTargetUpdated,RowEditEnding等)? 请不要打扰我。提前谢谢!
答案 0 :(得分:2)
您可以从数据集中检索已修改或已删除的行
var modifiedRows = Contacts.GetChanges(DataRowState.Modified);
var deletedRows = Contacts.GetChanges(DataRowState.Deleted);
考虑作为替代方法,创建一个实现INotifyPropertyChanged的新ContactViewModel类。使用此类作为数据表中每行的表示。
答案 1 :(得分:1)
我认为最好将ObservableCollection而不是DataTable绑定到Datagrid以通知插入或删除。
在我用来解决类似问题的解决方案下面的链接中,虽然另外我还需要更新绑定对象的属性值。希望它有所帮助...
Datagrid Binding with specialized ObservableCollection that updates item changes
的奥斯卡