Click here to Skip to main content
15,072,051 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
i have the following code in my application. But Listchanged event is not fired as expected. I have an object "Booking". I am calling this from frmMain. Would you please tell me the problem ??

C#
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;
    }

}

}


I am calling this code from here


C#
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);
        }
    }
Posted

1 solution

Where would you expect the ListChanged to be fired?

You are overwriting CashLoans in FillEntity, so whatever you assign to it in the constructor is gone. You probably want to attach the event handler in FillEntity.
   
Comments
Saumitra Kumar Paul 28-Sep-12 10:16am
   
Dear BobJanova, you are simply great, you are absolutely awesome. Thanks for the clue and its working now. Many many thanks.
BobJanova 28-Sep-12 11:00am
   
Haha, you're welcome and thanks. So tempting to put that in my forum signature ...

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900