DevExpress XPO Persistent Object реализует метод Сохранить и Новый
В моем проекте Winform у меня есть простая форма детализации, где мы можем добавлять новые, редактировать и сохранять постоянные объекты, пока все не будет в порядке.
Элементы управления Edit связаны кодом в конструкторе from, и первый новый объект также передается конструктором формы при первом создании
Теперь я хотел бы реализовать метод Сохранить и Новый, но безуспешно
Я попробовал это, предполагая, что tbVehicule - это класс объекта, theVehicule - мой постоянный объект, а frmVehicule - моя форма детализации.
// Form Constructor
public frmVehicule(tbVehicule theVehicule)
: this() {
this.theVehicule = theVehicule;
// method to bind all controls
bindingFields();
}
// Save and new method
private void barBtnSaveNew_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
this.Validate();
theVehicule.Save();
theVehicule = new tbVehicule(theVehicule.Session);
}
процесс должен быть похож на другие ORM, такие как EF или Hibernate
1 ответ
Я решил проблему самостоятельно, поэтому я ответил на мой вопрос, надеюсь, что он кому-то поможет, он не работает, потому что механизм DataBinding работает только в одном направлении (форма Controls to Object)
если мы создаем новый объект в нашем связанном объекте, значения элементов управления не следуют (они не обновляются), для этого нам нужно сбросить привязки
public void resetBindings()
{
foreach (Control c in Form1.Controls)
c.DataBindings.Clear();
bindingFields();
}
public void bindingFields()
{
txtCode.DataBindings.Add("Text",theVehicule,"vhCode");
...
..
txtActifInactif.DataBindings.Add("EditValue", theVehicule, "vhInactif");
}
private void barBtnSaveNew_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
this.Validate();
theVehicule.Save();
theVehicule = new tbVehicule(theVehicule.Session);
resetBindings();
}
с приведенным выше фрагментом все работает нормально, возможно, есть более элегантный способ сброса привязки, я выбрал переопределение привязок, потому что это единственный метод, который я нашел и который работает на данный момент.,