Mam następujący kod w mojej aplikacji. Ale zdarzenie Listchanged nie jest uruchamiane zgodnie z oczekiwaniami. Mam obiekt "Rezerwacja". Dzwonię to z frmMain. Czy mógłbyś mi powiedzieć problem?BindingList <> Wymienione zdarzenie nie zostało wysłane
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;
}
}
}
Wołam ten kod stąd
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);
}
}
Drogi Malio, wiele osób dziękuje. Mam wskazówkę i przedefiniowałem kod w następujący sposób: public BindingList CashLoans { get { return pCashLoans; } zestaw { foreach (Pożyczka po cenie) { pCashLoans.Add (pożyczka); } } } I działa dobrze zgodnie z oczekiwaniami. –