tôi có mã sau đây trong đơn đăng ký của mình. Nhưng sự kiện Listchanged không được kích hoạt như mong đợi. Tôi có một đối tượng "Đặt chỗ". Tôi đang gọi nó từ frmMain. Bạn vui lòng cho tôi biết vấn đề không ??BindingList <> Sự kiện đã thay đổi không được kích hoạt
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.ComponentModel;
namespace CustomObjects
{
public class Booking:ObjectBase
{
private int pBookingNo=0;
private BindingList<Loans> pCashLoans = new BindingList<Loans>();
public int BookingNo
{
get { return pBookingNo; }
set
{
if (!value.Equals(pBookingNo))
{
pBookingNo = value;
PropertyHasChanged("BookingNo");
}
}
}
public BindingList<Loans> CashLoans
{
get { return pCashLoans; }
set
{
pCashLoans = value;
//CalculateCashLoan(this,new System.ComponentModel.ListChangedEventArgs(ListChangedType.Reset,-1));
PropertyHasChanged("CashLoans");
}
}
private decimal pTakenCashLoan = 0;
public decimal TakenCashLoan
{
get { return pTakenCashLoan; }
set
{
pTakenCashLoan = value;
PropertyHasChanged("TakenCashLoan");
}
}
public void CalculateCashLoan(object sender, ListChangedEventArgs args)
{
decimal total = 0;
foreach (Loans loan in pCashLoans)
{
total += loan.LoanAmount;
}
this.TakenCashLoan = total;
}
public Booking()
{
this.pCashLoans.ListChanged += this.CalculateCashLoan;
}
public static Booking FillEntity(OleDbDataReader Reader, OleDbConnection Connection)
{
Booking booking = new Booking();
booking.BookingNo = (int)Reader["BookingNo"];
booking.CashLoans = Loans.GetLoanList(booking.BookingNo, 1, Connection);
booking.MarkOld();
return booking;
}
public static Booking GetEntity(int bookingNo, string ConnectionString)
{
Booking booking =new Booking();
using (OleDbConnection Connection = new OleDbConnection(ConnectionString))
{
string sqlSelect = "SELECT BookingNo FROM tblBooking WHERE BookingNo=" + bookingNo + "";
using (OleDbCommand cmd = new OleDbCommand(sqlSelect, Connection))
{
Connection.Open();
OleDbDataReader bReader = cmd.ExecuteReader();
if (bReader.HasRows)
{
bReader.Read();
booking = FillEntity(bReader, Connection);
}
Connection.Close();
if (!bReader.IsClosed)
{
bReader.Close();
}
}
}
return booking;
}
}
}
tôi kêu gọi mã này từ đây
private void frmMain_Load(object sender, EventArgs e)
{
AddDataBindings();
cmbBookingType.DataSource = BookingType.GetSelectionList(ConnectionString.CreateConnectionStringForAccess("LOCAL", "2012"));
}
private Booking booking=new Booking();
private void button1_Click(object sender, EventArgs e)
{
try
{
booking = Booking.GetEntity(1, ConnectionString.CreateConnectionStringForAccess("LOCAL", "2012"));
bsBooking.DataSource = booking;
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
MessageBox.Show(Ex.StackTrace);
}
}
Kính gửi Malio, cảm ơn nhiều bạn. Tôi đã có đầu mối và xác định lại mã như sau: công BindingList CashLoans { nhận được { return pCashLoans; } đặt { foreach (Cho vay có giá trị) { pCashLoans.Thêm (khoản vay); } } } Và nó hoạt động tốt như mong đợi. –