I'm new to CSLA , so here is my question. I have simple windows form application with datagridview and 2 buttons, Save and Delete.I need a solution for implementing Save() method for Save button, and Delete() method for Delete button.I believe it is really easy , but I can't figure out how to call these 2 methods.Datagridview control is editable, so my idea is when user add new row or edit some of existing cells and click on button save ,those data will be recorded in my database. Thank you in advance!
I'm using root editable collection and child editable stereotype. Here is a code for root:
[Serializable]
public class PDVCollection : BusinessBindingListBase<PDVCollection,PDV>
{
private PDVCollection()
{
AllowNew = true;
}
protected override object AddNewCore()
{
var item = PDV.PDV();
Add(item);
return item;
}
#region Factory Methods
public static PDVCollection GetAll()
{
return DataPortal.Fetch<PDVCollection>();
}
protected override void DataPortal_Update()
{
Child_Update();
}
#endregion
#region Data Access
private void DataPortal_Fetch()
{
RaiseListChangedEvents = false;
MySqlConnection con = new MySqlConnection("server=localhost;user id=root;password=1234;persistsecurityinfo=True;database=dbpos");
MySqlCommand cmd = new MySqlCommand("usp_PDVSelect", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
try
{
con.Open();
MySqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
var stopa = PDV.GetPDV(dr);
Add(stopa);
}
con.Close();
}
catch (Exception xcp)
{
throw xcp;
}
RaiseListChangedEvents = true;
}
}
#endregion
and here is a code for editable child
[Serializable]
public class PDV : BusinessBase<PDV>
{
public static readonly PropertyInfo<int> IdProperty = RegisterProperty<int>(c => c.Id);
public int Id
{
get { return GetProperty(IdProperty); }
private set { LoadProperty(IdProperty, value); }
}
public static readonly PropertyInfo<Guid> UidProperty = RegisterProperty<Guid>(c => c.Uid);
public Guid Uid
{
get { return GetProperty(UidProperty); }
private set { LoadProperty(UidProperty, value); }
}
public static readonly PropertyInfo<decimal> StopaProperty = RegisterProperty<decimal>(c => c.Stopa);
public decimal Stopa
{
get { return GetProperty(StopaProperty); }
set { SetProperty(StopaProperty, value); }
}
#region Factory Methods
internal static PDV NewPDV()
{
return DataPortal.CreateChild<PDV>();
}
internal static PDV GetPDV(MySqlDataReader dr)
{
return DataPortal.FetchChild<StopaPDV>(dr);
}
private StopaPDV()
{
}
#endregion
#region DataAccess
protected override void Child_Create()
{
LoadProperty(UidProperty, Guid.NewGuid());
base.Child_Create();
}
private void Child_Fetch(MySqlDataReader dr)
{
LoadProperty(IdProperty,Int32.Parse(dr[0].ToString()));
LoadProperty(UidProperty, Guid.Parse(dr[1].ToString()));
LoadProperty(StopaProperty, Decimal.Parse(dr[2].ToString()));
}
private void Child_Insert()
{
MySqlConnection con = new MySqlConnection("server=localhost;user id=root;password=1234;persistsecurityinfo=True;database=dbpos");
MySqlCommand cmd = new MySqlCommand("usp_PDVInsert", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("_uid", MySqlDbType.VarChar, 36).Value = Uid;
cmd.Parameters.Add("_stopa", MySqlDbType.Decimal).Value = Stopa;
cmd.Parameters.Add("_id", MySqlDbType.Int32).Direction = System.Data.ParameterDirection.Output;
int ID = 0;
try
{
con.Open();
cmd.ExecuteNonQuery();
ID = Convert.ToInt32(cmd.Parameters["_id"].Value);
con.Close();
}
catch (Exception xcp)
{
throw xcp;
}
}
private void Child_Update()
{
MySqlConnection con = new MySqlConnection("server=localhost;user id=root;password=1234;persistsecurityinfo=True;database=dbpos");
MySqlCommand cmd = new MySqlCommand("usp_PDVUpdate", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("_stopa",MySqlDbType.Decimal).Value = Stopa;
try
{
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception xcp)
{
throw xcp;
}
}
private void Child_DeleteSelf()
{
MySqlConnection con = new MySqlConnection("server=localhost;user id=root;password=1234;persistsecurityinfo=True;database=dbpos");
MySqlCommand cmd = new MySqlCommand("usp_PDVDeleteById", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("_id", MySqlDbType.Int32).Value = Id;
try
{
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception xcp)
{
throw xcp;
}
}
#endregion
}