gpt4 book ai didi

c# - 如何确定 ObservableCollection 中的一行是否实际更改

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:32 27 4
gpt4 key购买 nike

我有一个 ObservableCollection

私有(private)静态 CertOrigin_Entities db = new CertOrigin_Entities();私有(private)静态 ObservableCollection ocSHIPPING_DTL;

我有一个后期绑定(bind)的 WPF 数据网格

    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 服务器数据库在按钮后面和窗口关闭

    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 会在记录发生更改时保存记录,但我不希望它将记录保存为它没有改变。

变化的主要问题是这样的。我在 table 上有 3 个触发器

1 - 更新审计触发器后将删除的内容插入另一个数据库

2 - 更新审计触发器向多人发送电子邮件,说明用户更改了数据,他们需要重新打印文件并将其发送给海关

3 - On Update 触发器更新不同的表并将 last_used_tarrif 字段设置为等于用户更改的值。

如果用户实际上没有更改数据,则以上都不会触发。有没有办法检查记录是否真的改变了?

我可以将 observable 集合中的记录与表中的记录进行比较,只更新实际不同的记录吗?

有什么建议吗?

最佳答案

因为您将 UpdateSourceTrigger 设置为 PropertyChanged(请参阅 MSDN: Binding.UpdateSourceTrigger,每次它检测到更改时,它都会执行更改。

从 5864.193.45 更改为 5864.193.46 是一个操作,然后从 5864.193.46 更改为 5864.193.45 是另一个操作。

过程 1:您还可以将 UpdateSourceTrigger 更改为 LostFocus (UpdateSourceTrigger=LostFocus),这样一来,在您单击其他地方之前,更改不会生效。这样,当您从 5864.193.45 更改为 5864.193.46,然后从 5864.193.46 更改为 5864.193.45 时,它不会执行更改,直到您离开该文本区域。

过程 2:您始终可以实现主 ObservationCollection,然后仅在调用 _SaveChanges() 时进行比较。

关于c# - 如何确定 ObservableCollection<T> 中的一行是否实际更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12710787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com