![]() |
|
Модераторы: gambit |
![]()
|
|
| cupper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Есть тестовая БД, считываю от туда таблицу в переменную DataTable, далее помещаю ее грид. Нужно сделать возможным редактирование строк в таблице, прочитал куча материала, все везде разрознено и ничего в итоге не получается
Вот что имееться
Как довить колонку с кнопками для редактирования программно а не через разметку тоже непонял, через разметку она всегда стоит первый колонкой, а мне хотелось бы чтобы была последней. Далее
Теперь когда все оэто собираем, грид вполне нормально отрисовывается но переход в режим редактирование не происходит, при тыкание по кнопкам "редактирование" вылетает ошибка об не обработанном исключении, его как раз и нужно обрабатывать в GridView1_SelectedIndexChanged ? Но самый главный вопрос, это как сделать переход в режим редактирования у грида ? PS. Если я столбцы определю через разметку, как мне в таком случае заполнять их использую DataTables ? (ну на пример для того чтобы имена столбцов были не как в БД а как я укажу, или не все выводились) |
||||
|
|||||
| A5uKa |
|
|||
|
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 3 Всего: 16 |
ObjectDataSource ?
|
|||
|
||||
| cupper |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
не понял о чем вы, я новичек. Прочитал что нужно реализовать соответствующий обработчик для события
Сделать то сделал его а где и с чем связать не понял, если просто реализовать его в классе
непомогает Открыл для себя как в GridView добавлять обработчики событий
Теперь другая проблемма, они работают только со второго нажатия :( И когда переходитв режим редактирования текст боксы пустые, в них не отображается содержимое редактируемых ячеек. PS. забыл про еще один важный момент, мне нужно после того как я DataTable вывалил в GridView определенную строку сделать ReadOnly="true". Но такого метода не нашол :(
Это сообщение отредактировал(а) cupper - 5.8.2010, 14:20 |
||||||||||
|
|||||||||||
| A5uKa |
|
||||||||||
|
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 3 Всего: 16 |
Для начала я тебя не понимаю...
у DataGrid есть в меню "Правка столбцов" - там стоит указать все столбца так как нужны и в каком порядке надо. (возможен вариант оставить добавление дата-столбцов автоматически но тогда будет менее удобно работать с ними и тогда не знаю как поставить кнопку "Изменить" в конец, но думаю, что как-то можно)
ну обычно если в DataSource есть Select метод и есть кнопка редактирование ищется Update метод MSDN
сами заполнятся когда Select метод вернёт DataTable с соответствующими Филдами (Строками) они указываются там же в разметки (FieldName или DataFieldName)
Работает только для чётко указаных Филдов
Как вызвать программно не скажу сейчас ) У меня не работают аутохинты |
||||||||||
|
|||||||||||
| cupper |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
юзаю не DataGrid а GridView.
Пофиг короче на все эти красивости, теперь уж лиж бы сделать.
Получается мне нужно жестко связать разметку сайта и таблицу из БД. А если возьмут да и переименуют столбцы в таблице, тогда придется переделывать и разметку сайта. Вот именно поэтому я и заполняю ее программно, и в разметки оставляю самый минимум. Что бы максимально разделить уровень представления от уровня логики.
очень очень плохо. Я бы даже сказал что это Epic Fail какой то, прям подстава, быть такого не может. PS. а проблема с тем что нужно было два раза кликнуть, чтобы перейти в режим редактирования строки и чтобы значения редактируемых полей не исчезали, решается весьма непонятным мне образом, переносом связывание грида и таблицы из Page_Load в Page_Prerender Это сообщение отредактировал(а) cupper - 5.8.2010, 15:17 |
||||||
|
|||||||
| cupper |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
А как произвести Update модифицированной строки ? Тобишь как изменить значение определенной ячейки в GridView ?
делаю вот так
но после нажатие остаються старые значения Не совсем понимаю смысл поля Cells и Controls. Я понял что cells это норме элемента в строке (фактически номер колонки). А Controls ваще не знаю чего такое, просто взял с msdn. Не понимаю, проверил значения
там все верно считывается, но после
все равно отображается старая таблица Это сообщение отредактировал(а) cupper - 6.8.2010, 09:20 |
||||||
|
|||||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Проблема найдена, только я не знаю как ее устранить.
Данные обновляются, только после нажатия кнопки update повторно отрабатывает функция
которая изначально используется для загрузки таблицы из БД в гридвив. Думаю решить этот парадокс можно так: во время упдейта, не модифицировать gridview а сразу отправлять данные в БД, от куда они потом будут повторно считаны, но это имхо, гупость. PS. Как можно производить валидацию вводимых при редактировании данных в GridView ? Это сообщение отредактировал(а) cupper - 6.8.2010, 12:31 |
|||
|
||||
| EagleOne |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 20.11.2009 Репутация: 1 Всего: 1 |
Используй TemplateField-ы в разметке для создания колонок грида, пример:
В <EditTemplate> можешь размешать любые контролы - TextBox-ы и любые валидаторы для них... Это сообщение отредактировал(а) EagleOne - 6.8.2010, 13:08 |
||||
|
|||||
| cupper |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
спасибо, опять все переделывать )) Блин, как обычно почти нету информации :( по крайней мере ни могу найти ничего с чего бы начать изучение того как работать с TemplateField. Не моглибы на примере показать пару моментов, вот у меня щас есть такой GridView, мне при редактиваонии нужно проверять значение User_Name и User_Mail
Самой основное, вы уже сказали что нужно использовать
Но что например писать в <ItemTemplate> я хз, наверно lable ? А как его связать с определенной колонкой из DataTable, у негоже нет поля DataField. То что в <EditTemplate> нужно впихнуть эдитбокс я понял, вопрос на опережение, нужно ли его с чем то связывать или автоматом при переходе в редактирование в него будет записываться значение из элемента расположенного в <ItemTemplate> ? И будет ли вообще переход в режим редактиварония осуществляться или для этого еще чего шаманить нужно ? Буду рад любому материалу, но только не тому где они все делают на одной странице, связывание с БД и т.д. мне нужно сделать все с учетом бизнеслогики. Заранее спасибо Это сообщение отредактировал(а) cupper - 6.8.2010, 15:21 |
||||||
|
|||||||
| EagleOne |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 20.11.2009 Репутация: 1 Всего: 1 |
Да, обычно, label-ы используют:
в Edit-е так же:
Позже могу закинуть полноценный примерчик - сейчас под рукой нет ни вижака, ни проектов... Это сообщение отредактировал(а) EagleOne - 9.8.2010, 12:17 |
||||||
|
|||||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
буду очень признателен |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 2 Всего: 54 |
EagleOne,
По моему, правильно будет так:
-------------------- Слава Україні! |
||||
|
|||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 2 Всего: 54 |
Работаю с БД через GridView (пытаюсь
Читаю данные из БД. Создаю GridView. Определяю в GridView ItemTemplate и EditItemTemplate.
Добавляю CommandField.
Запускаю приложение - данные отображаются, кнопочка нажимается (и естественно ничего не происходит), а вот как перейти в режим редактирования (т.е. сделать так, что бы вместо Label'a отображался TextBox) не понятно. -------------------- Слава Україні! |
||||
|
|||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 2 Всего: 54 |
Разобрался я со своими проблемами
cupper, для того, что бы поля переключались в режим редактирования не со второго раза, а с первого необходимо реализовать обработчик события:
Больше всего помогла вот эта статья: MSDN -------------------- Слава Україні! |
|||
|
||||
| EagleOne |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 20.11.2009 Репутация: 1 Всего: 1 |
кнопки тоже можно запихивать в <asp:TemplateField> у кнопок есть аттрибут CommandName и если этому аттрибуту задать значение "Edit", кнопка будет переключать грид в режим редактирования без всяких обработчиков, так же есть имена комманд "Cancel" - обратно в обычный режим, "Select" - выбор строки, "Update" - обновить отредактированную строку. Вот пример грида полный:
|
||||
|
|||||
| cupper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Возник новый вопрос по GridView.
Предположим есть две таблицы А и Б, колонка А1 может принимать значения только из записей добавленных в Б. Я в конструировании БД не силен, поэтому сделал просто две таблицы (независимые) Теперь вопрос: в GridView при редактировании записи из таблицы А, а именно колонки А1 диапазон значений должен соответствовать значениям находящимся в таблице Б. Само собой напрашивается сделать при редактировании DropDownList. Вопрос в том как его связать со значениями из таблицы Б если GridView связан с таблицей А ? Было принято решение при переходе в режим редактирования обращаться к БД и заполнять ето поле динамически. PS. небольшой организационный вопрос:
как можно в Bind впихнуть запрос к файлу ресурсов ? чтото вроде
само собой так оно не работает Это сообщение отредактировал(а) cupper - 10.8.2010, 16:58 |
||||
|
|||||
| EagleOne |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 20.11.2009 Репутация: 1 Всего: 1 |
В Bind не надо ничег впихиват, нужно в EditItemTemplate
разместить DropDownList и источник данных к нему (в вашем случае ичтоник данных вытаскивающий значения из таблицы Б, как я понял). Источник данных привязать к DropDownList-у. |
|||
|
||||
| cupper |
|
||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
нее, вы не поняли, вместо того чтобы писать
тобишь жестко использовать константную строку "Name", хотелось бы брать ее в файла ресурсов. А по поводу связывания DropDownList и источника данных, это тоже происходит динамически (не на странице с разметкой) а в обработчике
Вот только одна загвоздка, связать то я связал с данными, а нужно еще сделать ddl.SelectedIndex на ту строчку которая отображалась перед режимом редактирования в lable. Вопрос в том как ее получить ? Делаю в этом же обработчике
Но получаю на lbl.Text ошибку
--------- было решено следующим образом В разметки
в обработчике
Это сообщение отредактировал(а) cupper - 11.8.2010, 14:12 |
||||||||||||||
|
|||||||||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |