Propagating information from DAL to UI

Propagating information from DAL to UI

Old forum URL: forums.lhotka.net/forums/t/6435.aspx


Katani posted on Tuesday, February 17, 2009

I want to ask if there is a way to inform UI that specific property should be edited using specified control.
Lets say i have a Person object. Person have Status property which in database is stored in separate table. I want to ask is there a way to set something i Person object which will tell UI to edit Status using combobox in which list will be filled with Status objects?

Antonio Sandoval replied on Tuesday, February 17, 2009

If you have something Like This

Table Person
PersonID (PK)

Table PersonStatus
PersonID  (PK)
StatusID

Table Status
StatusID  (PK)
StatusName

In your BO you can have something like this

Person : BusinesBase{
    int _PersonID;

   PersonStatus _PersonStatus;
 
 public PersonStatus PersonStatus{
get{
 return _PersonStatus;
}
}
  public Person GetPerson(int PersonID){
        DataPortal<Person>.Fetch(new Criteria(PersionID));
  }

  private Person(){
     _PersonStatus=PersonStatus.NewPersonStatus();  //Status by default
  }

internal Fetch(SafeDataReader dr){
}

  DataPortal_Fetch(Criteria )
 {
    using(DBManager db =new DBManger(connectionString)){
    db.Parameters.Clear();
     db.AddParameter("@PersonID",criteria.PersonID);
     SafeDataReader dr = db.GetDataReader();
     Fetch(dr);
     dr.NextResult();
      _PersonStatus.Fetch(dr,db); 
}
 }
[Transactional(TransactionScope)]
  DataPortal_Update(){
    using(DBManager db =new DBManger(connectionString)){
     Update your person in database
     _PersonStatus.Update(this,db);//Using the same connection for TransactionScope
  }
 }
}

[Transactional(TransactionScope)]
  DataPortal_Insert(){
    using(DBManager db =new DBManger(connectionString)){
     Update your person in database
     _PersonStatus.Insert(this,db);//Using the same connection for TransactionScope
  }
 }
}

PersonStatus : BusinesBase
   int _PersonID;
   string StatusID;
   internal Update(Person myperson,DBManager db){
       _PersonID =myperson.PersonID;
     Update in database
   }
   internal void Insert(Person myperson,DBManager db){
 _PersonID=myperson.PersonID;
 insert data;
}
    internal void Fetch(SafeDataReader dr){
       Fill yours properties;
    }


}

Status: BusinessBase {

public string StatusID {
}
public string StatusName{
}

}

StatusList: BussinesListBase {
}

So now for the databindings in your WinForm or in ASP controls:

Person myperson = Person.GetPerson(1);
personBindingSource.DataSource=myperson;
personStatusBindingSource.dataSource=personBindingSource;
personStatusBindingSource.DataNember="PersonStatus";
statusListBindingSource.DataSource=StatusList.GetStatusList();

cboPersonStatus.DataSource=statusListBindingSource;
cboPersonStatus.ValueMember="StatusID";
cboPersonStatus.DisplayMember="StatusName";
cboPersonStatus.DataBindings.Add("ValueMember",personStatusBindingSource,"StatusID");

Following the example of projecttracker is so easy to make this effort. DBManager is my DAL.





Copyright (c) Marimer LLC