【发布时间】:2017-11-15 03:00:41
【问题描述】:
我的窗口中有一些文本框,点击 btn_add 后它们的内容将被添加到 Observable Collection 中,然后将成为 dg_VoucherDetail 的来源。 问题是: 当我第一次使用它时一切都很好,但第二次它只是替换旧的 Observable 集合,除了向旧集合添加新项目, 对于编辑部分,集合中没有要搜索和编辑的项目。 这是代码:
private void btn_add_Click(object sender, RoutedEventArgs e)
{
_VoucherDetail = new ObservableCollection<VoucherDetail>();
VoucherDetail Voucher = new VoucherDetail();
if (dg_VoucherDetail.HasItems == true)
{
for (int i = 0; i < _VoucherDetail.Count; i++)
{
if (_VoucherDetail[i].LedgerID == SelectedLedgerID)
{
if (_VoucherDetail[i].DefinitiveID == SelectedDefinitiveID)
{
if (_VoucherDetail[i].Credit == Convert.ToDecimal(txt_Amount.Text))
return;
else if (_VoucherDetail[i].Debit == Convert.ToDecimal(txt_Amount.Text))
return;
else
{
Voucher.LedgerID = SelectedLedgerID;
Voucher.DefinitiveID = SelectedDefinitiveID;
if (radio_debit.IsChecked == true)
{
Voucher.Debit = Convert.ToDecimal(txt_Amount.Text);
Voucher.Credit = 0;
}
else if (radio_credit.IsChecked == true)
{
Voucher.Debit = 0;
Voucher.Credit = Convert.ToDecimal(txt_Amount.Text);
}
_VoucherDetail[i] = Voucher;
}
}
else if (_VoucherDetail[i].DefinitiveID != SelectedDefinitiveID)
{
Voucher.LedgerID = SelectedLedgerID;
Voucher.DefinitiveID = SelectedDefinitiveID;
if (radio_debit.IsChecked == true)
{
Voucher.Debit = Convert.ToDecimal(txt_Amount.Text);
Voucher.Credit = 0;
}
else if (radio_credit.IsChecked == true)
{
Voucher.Debit = 0;
Voucher.Credit = Convert.ToDecimal(txt_Amount.Text);
}
_VoucherDetail.Add(Voucher);
}
}
else if (_VoucherDetail[i].LedgerID != SelectedLedgerID)
{
Voucher.LedgerID = SelectedLedgerID;
Voucher.DefinitiveID = SelectedDefinitiveID;
if (radio_debit.IsChecked == true)
{
Voucher.Debit = Convert.ToDecimal(txt_Amount.Text);
Voucher.Credit = 0;
}
else if (radio_credit.IsChecked == true)
{
Voucher.Debit = 0;
Voucher.Credit = Convert.ToDecimal(txt_Amount.Text);
}
_VoucherDetail.Add(Voucher);
}
}
}
if (dg_VoucherDetail.HasItems == false)
{
Voucher.LedgerID = SelectedLedgerID;
Voucher.DefinitiveID = SelectedDefinitiveID;
if (radio_debit.IsChecked == true)
{
Voucher.Debit = Convert.ToDecimal(txt_Amount.Text);
Voucher.Credit = 0;
}
else if (radio_credit.IsChecked == true)
{
Voucher.Debit = 0;
Voucher.Credit = Convert.ToDecimal(txt_Amount.Text);
}
_VoucherDetail.Add(Voucher);
// dg_VoucherDetail.Items.Add(VoucherDetail);
}
dg_VoucherDetail.ItemsSource = _VoucherDetail;
}
internal class VoucherDetail
{
public decimal LedgerID { get; set; }
public decimal DefinitiveID { get; set; }
public decimal Debit { get; set; }
public decimal Credit { get; set; }
}
【问题讨论】:
标签: c# wpf observablecollection