Проблема с обновлением базы(применение и отмена изменений)

NordS
Дата: 14.04.2005 20:48:28
Есть датасет в котором есть родительская и дочерняя таблица. Каждая запись родительской таблицы (и соответственно связанные с ней дочерние) редактируются в своем экземпляре форме. При сохранении изменений, данные должны сбрасываться в базу(есть два датаадаптера - для родительской и дочерней). При отмене должны просто отменяться в датасете. Вопрос стоит в том как это правильно реализовать, т.к. столкнулся с некоторыми сложностями:
1)Если просто обновлять через датаадаптер передавая ему таблицу, то он сбросит данные, которые редактируются в других формах и не были сохранены
2)Пытаюсь сделать обновление вручную:


currentBillRow.EndEdit();
FormMain frmMain=(FormMain)this.MdiParent;
DataRow[] rows1;
DataRow[] rows2;
rows1=dsMReport.Bill.Select("BillId="+currentBillRow.BillId,"BillId",DataViewRowState.ModifiedCurrent |
(DataViewRowState.Deleted | DataViewRowState.Added));
rows2=dsMReport.BillContent.Select("BillId="+currentBillRow.BillId,"BillId",DataViewRowState.ModifiedCurrent |
(DataViewRowState.Deleted | DataViewRowState.Added));
daBill.Update(rows1);
daBillContent.Update(rows2);
currentBillRow.AcceptChanges();



И отменение изменений тоже вручную:

currentBillRow.EndEdit();

DataRow[] rows=dsMReport.BillContent.Select("BillId="+currentBillRow.BillId,"",DataViewRowState.ModifiedCurrent | (DataViewRowState.Deleted | DataViewRowState.Added));
foreach(DataRow row in rows)
{
row.RejectChanges();
}
currentBillRow.RejectChanges();


Вроде бы все нормально, но натыкаемся на следующие грабли: если на одной форме отменить изменения, а на другой сохранить, то при сохранении вылетает експешен "This row has been removed from a table and does not have any data. BeginEdit() will allow creation of new data in this row." хотя в массивах лежат правильные строки. В чем может быть дело?
Sa
Дата: 14.04.2005 21:43:40
Во-первых, обновляйте отдельно deleted, modified и added записи.
Во-вторых, что у вас является Master а что Detail
Хотелось бы взглянуть, код редактирования и "сохранения" в других формах.

+ непомешала бы структура таблиц



uid = Sa
NordS
Дата: 14.04.2005 22:05:54
Sa
Во-первых, обновляйте отдельно deleted, modified и added записи.

Пробывал не помогает.

Sa
Во-вторых, что у вас является Master а что Detail

Bill - master, BillContent - detail

Таблицы:
Agent(AgentId,Name)
BillType(BillTypeId,Name)
Material(MaterialId,Name,UnitId)
Unit(UnitId,Name)
Bill(BillId,BillTypeId,AgentId,Number,Date,VAT,VATValue)
BillContent(BillId,MaterialId,Price,Count,Cost,PriceVAT)

Отношения:
AgentToBill
BillTypeToBill
UnitToMaterial
MaterialToBillContent

Поля Cost и PriceVAT вычисляемые

Sa
Хотелось бы взглянуть, код редактирования и "сохранения" в других формах


Имеется ввиду не в других формах, а вдругих экземплярах этой формы. Т.е. ситуация когда редактируется(создано две новых) две накладные и в одной изменеия отменяются, а в другой применябтся вылетает такой вот ексепшен.
Sa
Дата: 23.04.2005 02:35:01
NordS

Имеется ввиду не в других формах, а вдругих экземплярах этой формы. Т.е. ситуация когда редактируется(создано две новых) две накладные и в одной изменеия отменяются, а в другой применябтся вылетает такой вот ексепшен.


А насколько логически обоснованно использование нескольких экземпляров форм, когда могут произойти такие накладки?

+ покажите код как делаются изменения.

uid = Sa