Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
C#, ADO: изменение значений таблицы через её представление(MSSQL view) в DataGridView
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть следующая задачка: Проект C#(VS 2010), связан с MS SQL expr 2008 через ado.net. На серваке есть 2 таблицы. Т1(столбцы) - [Код_Т1_PK], [Username], [FK_T2] Т2(столбцы)- [Код_Т2_PK], [Organisation_name] Так же есть view(пусть будет T3), выбирающий из таблиц следующие поля: [Код_Т1_РК], [Username], [Organisation_name] Соединение с БД организовывал НЕ через мастер, а вручную(ибо возможно понадобится подключаться к другому серверу, либо под другим именем). Требуется, чтобы в DataGridView выводились результаты из представления(наглядно, красиво), но любые действия пользователя, совершенные над данными в DataGridView, совершались над таблицей Т1. То есть, например, добавляя/изменяя/удаляя запись в датагриде, запись бы так же добавлялась/изменялась итд в Т1 на сервере. Добавлю, что MSSQL не допускает какого-либо изменения записей в самом представлении, если затрагивается сразу несколько базовых таблиц. Проще говоря, удалить/добавить запись в Т1 через view, выведенный на DataGridView, не получится. Изменить Organisation, к которой относится Username, через представление тоже не получится. Придумал вот такие извращенные выходы из ситуаций, в зависимости от требуемых действий: -Удаление делать через T3DataGridView.CurrentRow.Index и myDataTable.Rows[]. Минусы в том, что это заставит юзера удалять по одной записи. -Добавление как-нибудь через отдельную кнопку, запрос INSERT и кучу текстбоксов сделать. Минусы в том, что это неудобно, ибо в Т1, помимо указанных выше, содержится ещё с десяток столбцов. Как реализовать изменение - вообще не понятно. Есть у кого предложения? Буду рад любой помощи. P.S. Блин, уже утро, и я очень сильно торможу. Заранее прощу прощения, если запостил не в том разделе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 06:01 |
|
||
|
C#, ADO: изменение значений таблицы через её представление(MSSQL view) в DataGridView
|
|||
|---|---|---|---|
|
#18+
BadVodka, Примите 100 грамм и почитайте про DataAdapter. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 09:23 |
|
||
|
C#, ADO: изменение значений таблицы через её представление(MSSQL view) в DataGridView
|
|||
|---|---|---|---|
|
#18+
Решилось добавлением в DataSet объекта DataRelation, связав таким образом Т1 и Т2 по FK. Затем в таблицу, являющуюся источником данных DataGridView(в моём случае это Т1) добавил новую колонку со свойством Expression="Parent(Имя_отношения).Organisation_name". Таким образом можно работать сразу с Т1 непосредственно через datagridview, поэтому с удалением теперь проблем никаких. Осталось додумать, каким образом добавлять/изменять записи так, чтобы пользователю не пришлось вводить Код_T2_PK в поле FK_T2. Попробую как-нибудь сделать через Listbox, со свойствами DisplayMember=Organisation_name и ValueMember=Код_Т2_РК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2011, 22:40 |
|
||
|
C#, ADO: изменение значений таблицы через её представление(MSSQL view) в DataGridView
|
|||
|---|---|---|---|
|
#18+
Оказалось, решение ещё проще. Просто нужно было создать колонку вида combobox с датасурсом T2, и привязать её к полю Т1, содержащему ссылку на PK второй таблицы при помощи свойства DataPropertyName="ИмяПоляТ1" =) И никаких DataRelation даже не потребовалось. Выглядит всё так: DataGridViewComboBoxColumn cb_t2 = new DataGridViewComboBoxColumn(); cb_t2.DataSource = table2; cb_t2.DisplayMember = "Organisation_name"; cb_t2.ValueMember = "T2_PK"; cb_t2.DataPropertyName = "FK_T2"; userDataGridView1.Columns.Add(cb_t2); userDataGridView1.DataSource = table1; Удивительно, что решение оказалось таким простым - форумы пестрят подобными вопросами, а ответ найти никто не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2011, 22:33 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=37299786&tid=1350742]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 354ms |

| 0 / 0 |
