Берем WinForms, ложим два TextBox на форму (поля ID, FName), DataAdapter (там запрос
select ID, FName from TI_IS where ID=1), генерим датасет dsIS1. Заполнение датасета и прочее не привожу. Меняем FName, далее при нажатии на кнопку "Update" вызывается такое:
BindingContext[dsIS1.TI_IS].EndCurrentEdit();
odap.Update(dsIS1.TI_IS.GetChanges());
dsIS1.TI_IS.AcceptChanges();
всё работает, все счастливы.
Теперь переходим к ASP.NET. Ложим на страничку два TextBox, кнопку Update в btnUpdate_Click пишем:
dsIS1.TI_IS.Rows[0].EndEdit();
odap.Update(dsIS1.TI_IS.GetChanges());
dsIS1.TI_IS.AcceptChanges();
dsIS1.TI_IS.GetChanges() всегда возвращает null. Что я делаю не так и как сделать правильно?
Здравствуйте, Denisss, Вы писали:
D>Берем WinForms, ложим два TextBox на форму (поля ID, FName), DataAdapter (там запрос select ID, FName from TI_IS where ID=1), генерим датасет dsIS1. Заполнение датасета и прочее не привожу. Меняем FName, далее при нажатии на кнопку "Update" вызывается такое:
D>D>BindingContext[dsIS1.TI_IS].EndCurrentEdit();
D>odap.Update(dsIS1.TI_IS.GetChanges());
D>dsIS1.TI_IS.AcceptChanges();
D>
D>всё работает, все счастливы.
D>Теперь переходим к ASP.NET. Ложим на страничку два TextBox, кнопку Update в btnUpdate_Click пишем:
D>D>dsIS1.TI_IS.Rows[0].EndEdit();
D>odap.Update(dsIS1.TI_IS.GetChanges());
D>dsIS1.TI_IS.AcceptChanges();
D>
D>dsIS1.TI_IS.GetChanges() всегда возвращает null. Что я делаю не так и как сделать правильно?
попробуй так
private void _update(DataTable table)
{
SqlDataAdapter _da = (SqlDataAdapter)_data.GetType().GetField(String.Format("da_{0}", table.TableName.ToLower()),
BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField).GetValue(_data);
if (_da != null)
{
_da.Update(table);
}
}
гдк _data — System.ComponentModel.Component там размещены все дата адаптеры проекта или его части, при этом они все начинаются на "da_имя". хотя это мои странности можеш делать как хочеш просто, идея из кода понятна.
D>>dsIS1.TI_IS.GetChanges() всегда возвращает null. Что я делаю не так и как сделать правильно?
H>попробуй так
[.........]
H> private void _update(DataTable table)
H> {
[.........]
H> }
H>гдк _data — System.ComponentModel.Component там размещены все дата адаптеры проекта или его части, при этом они все начинаются на "da_имя". хотя это мои странности можеш делать как хочеш просто, идея из кода понятна.
это то же самое... Только у тебя адаптер ищется, а у меня он заранее известен. Тут немного другое дело — update даже не уходит на сервер. То есть проблем гдето с определением того, какое поле изменилось... Возможно не на месте EndEdit или неправильно оно вызывается — вот этого я и не могу понять.
Здравствуйте, Denisss, Вы писали:
D>>>dsIS1.TI_IS.GetChanges() всегда возвращает null. Что я делаю не так и как сделать правильно?
H>>попробуй так
D>[.........]
H>> private void _update(DataTable table)
H>> {
D>[.........]
H>> }
H>>гдк _data — System.ComponentModel.Component там размещены все дата адаптеры проекта или его части, при этом они все начинаются на "da_имя". хотя это мои странности можеш делать как хочеш просто, идея из кода понятна.
D>это то же самое... Только у тебя адаптер ищется, а у меня он заранее известен. Тут немного другое дело — update даже не уходит на сервер. То есть проблем гдето с определением того, какое поле изменилось... Возможно не на месте EndEdit или неправильно оно вызывается — вот этого я и не могу понять.
фактически тоже да нетоже, ты посылаеш изменения в датасете dsIS1.TI_IS.GetChanges()); а я посылаю всю таблицу целиком, а он уже сам там решает что изменилось а что нет. вот и тебе советую послать не GetChanges() а таблицу целиком или даже датасет целиком. и еще проверь перед посылкой есть ли вообще данные в датасет и в частности в той таблице в которой меняеш