I have a table called Currency
with two properties to be inserted which are Unit
and Rate
.
When I press add
or edit
, only Unit
is saved but Rate
remain 0
.
When I press delete
, the record is deleted successfully.
Below is the code from Data Layer
public interface ICurrencyRepository
{
List<Currency> GetAll();
Currency GetById(int id);
Currency Insert(Currency obj);
void Update(Currency obj);
void Delete(Currency obj);
}
public class CurrencyRepository : ICurrencyRepository
{
public void Delete(Currency obj)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
db.Currencies.Attach(obj);
db.Currencies.Remove(obj);
db.SaveChanges();
}
}
public List<Currency> GetAll()
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
return db.Currencies.ToList();
}
}
public Currency GetById(int id)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
return db.Currencies.Find(id);
}
}
public Currency Insert(Currency obj)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
db.Currencies.Add(obj);
db.SaveChanges();
return obj;
}
}
public void Update(Currency obj)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
db.Currencies.Attach(obj);
db.Entry(obj).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
}
}
}
Below is the code from Business Layer
public static class CurrencyServices
{
static ICurrencyRepository repository;
static CurrencyServices()
{
repository = new CurrencyRepository();
}
public static List<Currency> GetAll()
{
return repository.GetAll();
}
public static Currency GetById(int id)
{
return repository.GetById(id);
}
public static Currency Insert(Currency obj)
{
return repository.Insert(obj);
}
public static void Update(Currency obj)
{
repository.Update(obj);
}
public static void Delete(Currency obj)
{
repository.Delete(obj);
}
}
Below is the code from my UI (Page with grid)
private void btnNew_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
DocumentController.ActivateForm(typeof(Test), null);
currencyBindingSource.DataSource = CurrencyServices.GetAll();
}
private void btnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (currencyBindingSource.Current == null)
{
return;
}
else
{
DocumentController.ActivateForm(typeof(Test), currencyBindingSource.Current as Currency);
currencyBindingSource.DataSource = CurrencyServices.GetAll();
}
}
Below is the code from my UI (Edit Page)
bool isNew;
public CurrencyEdit(Currency obj)
{
InitializeComponent();
if (obj == null)
{
currencyBindingSource.DataSource = new Currency();
isNew = true;
}
else
{
currencyBindingSource.DataSource = obj;
isNew = false;
}
}
private void btnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (isNew)
{
CurrencyServices.Insert(currencyBindingSource.Current as Currency);
}
else
{
CurrencyServices.Update(currencyBindingSource.Current as Currency);
}
}
Below is how I currencyBindingSource
is getting created and bound in UI code.
- Add bindingSource from toolbox.
- Go to properties -> DataSource -> Add Project Data Source -> Object -> Choose
currency
table. - Add two textboxes -> Properties -> DataBindings -> EditValue -> Choose
Unit
andRate
fromcurrencyBindingSource
.
Here is what you need to do. I believe you are missing some appropriate casts which are required:
Note:
EfTestDataSet
is the name of the data source data set which got created while adding binding source in my application. It might be different in your application.Hope this helps!