Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Редактирование данных, Binding, UpdateCommand
|
|||
|---|---|---|---|
|
#18+
Братцы.. я полный лобзик (прочитал всего одну умную (лучшую) книгу, в которой почти отсутствуют знания по организации интерфейса для обработки данных, как и о ADO.NET в общем) в .NET, так что учусь на ходу. Тема такая: есть форма с гридом (главная) - в гриде документы. Есть форма для редактирования документа, которую я создаю, передаю ей DataSet и DataAdapter (инициализирую соответствующие internal переменные) и отображаю. При создании формы биндю контролы к полям таблицы. В DataAdapter все действия заданы процедурами, причем (!) в процедуре на Update входящих параметров меньше, чем полей в таблице, плюс есть исходящие параметры - в них сервисная информация. Данная процедура также возвращает измененную строку. Описанная мной ситуевина работает вплоть до выборки и отображения данных :)) - дальше раздолье для познания! Хотел на опыте подобрать рабочие условия, но вываливается ошибка System.InvalidCastException: Object must implement IConvertible. Вопрос: как правильно надо жить в таких условиях??? Т.е., 1) нужно редактировать dataset на другой форме. Что нужно форме редактирования для счастья? Как правильно начать, закончить редактирование записи и какой командой внести изменения в БД? Наводка на смысл - хочу логику поведения формы вытащить из приложения в базу, посему для этого соответственно заделать процедуру обновления, и вызывать ее, например, после потери фокуса любым контролом. Из процедуры возвращать состояния контролов (полей), вычисленные значения, сообщения об ошибках и т.д. Сразу скажу - посты типа "маразм это" отвергаются без предложения альтернативы :) 2) имеет ли право на существование подобная процедура обновления записи? Если да, то как ее правильно прикрутить? Буду рад любым вашим знаниям, либо посылке меня подальше на какой-нибудь ресурс, раскрывающий тему! принципиальный пример процедуры: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ----- Иногда решительный шаг вперед - результат хорошего пинка сзади ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2004, 19:26 |
|
||
|
Редактирование данных, Binding, UpdateCommand
|
|||
|---|---|---|---|
|
#18+
По процедуре - сходу: (`yka if @IsCheckOnly = 1 BEGIN select @TableField1 = TableField1, @TableField2 = TableField2 from Doc where UID = @UID END else BEGIN update Doc set TableField1 = @TableField1, TableField2 = @TableField2 where UID = @UID END /* .... проверка правильности полей и заполнение выходных параметров */ иначе потом будет много неожиданных сюрпризов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2004, 19:46 |
|
||
|
Редактирование данных, Binding, UpdateCommand
|
|||
|---|---|---|---|
|
#18+
Ёлки-палки.. Подумал, подумал, когда писал код... и удалил в этих местах begin/end. Зря, кажется :) Просьба по ходу - не обращайте внимания на типы данных "xxx"! Это условность, не имеющая значения в данном контексте. ЗЫ Все равно спасибо, Один. Ценное замечание. ----- Иногда решительный шаг вперед - результат хорошего пинка сзади ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2004, 19:57 |
|
||
|
Редактирование данных, Binding, UpdateCommand
|
|||
|---|---|---|---|
|
#18+
(`ykaКак правильно начать, закончить редактирование записи ... DataSet ds; // считаем, что уже проинициализирован ds.Tables[0].Rows[0].BeginEdit(); // делаем необходимые изменения записи ds.Tables[0].Rows[0].EndEdit(); (`ykaи какой командой внести изменения в БД? Тут можно по разному подойти к решению вопроса: 1. Использовать DataAdapter.Update(DataSet ds | DataTable dt) в этом случае нужно настроить DataAdapter.UpdateCommand, DataAdapter.DeleteCommand, DataAdapter.InsertCommand. Допустим так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 2. Заливать обновления построчно, используя SqlCommand.ExecuteReader(); Подготовка комманды см. п. 1 с той лишь разницей, что последний параметр конструктора SqlParameter не null, а значение передаваемого параметра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 10:46 |
|
||
|
Редактирование данных, Binding, UpdateCommand
|
|||
|---|---|---|---|
|
#18+
Примерно так все и делаю. Сначала пропала ошибка System.InvalidCastException: Object must implement IConvertible. Но появилась другая по поводу Expression-полей (мол, не могу изменить свойство ReadOnly..). Оказалось, что куча народу страдают из-за этой заподляны. Самый действенный вариант оказался на время Update'а убирать вычисляемые поля в ArrayList, а после - заливать их обратно. И вот уже вроде все заработало, как изменился тип поля в таблице.. я чего-то перекроил, и вернулась мерзкая System.InvalidCastException: Object must implement IConvertible. Куда смотреть - ХЗ :( ----- Иногда решительный шаг вперед - результат хорошего пинка сзади ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2004, 17:49 |
|
||
|
|

start [/forum/topic.php?fid=20&gotonew=1&tid=1438268]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
11ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 404ms |

| 0 / 0 |
