我有一个 ObservableCollection
私有静态 CertOrigin_Entities db = new CertOrigin_Entities(); 私有静态 ObservableCollection ocSHIPPING_DTL;
我有一个后期绑定的 WPF Datagrid
private void btn_SEARCH_Click(object sender, RoutedEventArgs e)
{
string sCI = this.txt_SEARCH.Text;
var sd = (db.TBL_SHIPPING.Where(x => x.CommercialInvoiceNumber == sCI)).ToList();
if (sd.Count() > 0)
{
iID = (int)sd[0].SHIPPING_ID;
var query = (db.v_wpf_cert_origin.Where(x => x.SHIPPING_ID == iID));
ocSHIPPING_DTL = new ObservableCollection<v_wpf_cert_origin>(query.ToList());
dgCOO.ItemsSource = ocSHIPPING_DTL;
var cust = (from x in db.TBL_CUSTOMER
join y in db.TBL_REQUISITION on x.CUSTOMER_ID equals y.CUSTOMER_ID
join z in db.TBL_SHIPPING on y.REQ_ID equals z.REQ_ID
where z.SHIPPING_ID == iID
select new {CUST = x.CustomerName}).ToList();
this.lbl_CUSTOMER.Content = cust[0].CUST.ToString();
}
}
我正在更新按钮后面的 SQL Server 数据库并在窗口关闭时
private static bool _SaveChanges()
{
DbTransaction _dbTransaction = null;
db.Connection.Open();
using (_dbTransaction = db.Connection.BeginTransaction())
{
try
{
db.SaveChanges();
db.AcceptAllChanges();
_dbTransaction.Commit();
db.Connection.Close();
}
catch (TransactionAbortedException ex)
{
db.Connection.Close();
throw ex;
}
return true;
}
}
这是发生在我身上的事情......在我的数据网格中,我有一个文本框
<DataGridTemplateColumn Header="Hs Tarriff Class #:" Width="125" IsReadOnly="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=HsTarriffClassNumber,
UpdateSourceTrigger=PropertyChanged,
NotifyOnTargetUpdated=True}"
Name="txt_HsTarriffClassNumber"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
如果文本框的值是 5864.193.45 并且我将其更改为 5864.193.46 然后返回 5864.193.45 ObservableCollection 会在记录发生更改时保存记录,但是我不希望它保存记录,因为它没有改变。
变化的主要问题是这个。我桌上有 3 个触发器
1 - 更新后审核触发器将删除并将其插入另一个数据库
2 - 更新后审核触发器向多人发送电子邮件,说明用户更改了数据,他们需要重新打印文件并将其发送给海关
3 - On Update 触发器,更新不同的表并将 last_used_tarrif 字段设置为等于用户更改的值。
如果用户实际上没有更改数据,则上述任何一项都不应触发。有没有办法检查记录是否真的改变了?
我可以将可观察集合中的记录与表中的记录进行比较,并且只更新那些实际上不同的记录吗?
有什么建议吗?