Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataGridView и привязка данных, Измения из DataGridView перенести в БД 
:(
    Опции темы
shell14
Дата 4.5.2007, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.5.2006

Репутация: нет
Всего: нет



Суть проблемы: таблица их БД отображается с помощью DataGridView, хочу чтобы при добавлении новой строки или изменении каких то данных, после нажатия на кнопку сохранить, вносились изменения в БД.
Есть решение, которого я хочу добиться (см картинку), его генерит студия 2005, при переносе таблицы их БД на форму. Но там слишком много всего (она полностью изучает БД и генерит все связи, очень много и громоздко).

Хочеться найти хороший мануал по DataGridView и привязке данных. Никто не подскажет?

Просто не могу понять, решать вопрос именно о привязке данных? или может быть проще получить изменения сделанные в DataGridView и просто написать обработчик для внесения изменений в БД?
Но хотелось бы чтобы работало именно как в примере. Как этого можно добиться?
Еще может кто подскажет грамотное решение, как отобразиь в DataGridView двумерный массив? не хочеться класс писать, потому что просто массив даблов.

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  Example.jpg 32,69 Kb
PM MAIL   Вверх
Papirus
Дата 4.5.2007, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: -1
Всего: 1



У DataGridView есть свойство DataSource, которому можно назначить таблицу. Примерно так:

Код


        Using cn As New SqlClient.SqlConnection(My.Settings.cnn) 

            Dim cmd As New SqlClient.SqlCommand("Select * From MyTable", cn)
            cn.Open()
            Dim rd As SqlClient.SqlDataReader = cmd.ExecuteReader
            Dim tbl As New DataTable
            tbl.Load(rd)
            rd.Close()
            rd = Nothing
            Me.DataGridView1.DataSource = tbl         
        End Using




Если надо на C# могу и в этом виде (просто VB привычнее) smile

Добавлено через 9 минут и 9 секунд
Можно далее действовать разными способам
- создать датаадаптер и прописать свой код обновления данных
- получать в отдельную таблицу изменения и обрабатывать построчно. Если tbl объявлена на уровне модуля, то

 
Код

Dim tblChange As New DataTable = tbl.GetChanges
        For Each rw As DataRow In tblChange
            Select Case rw.RowState
                Case DataRowState.Added
                Case DataRowState.Deleted
                Case DataRowState.Modified

            End Select
        Next

PM MAIL ICQ   Вверх
shell14
Дата 4.5.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.5.2006

Репутация: нет
Всего: нет



Ну да про DataSource я в курсе. Я делал примерно также, только брал DataSet, и заполнял его через SqlDataAdapter
Потом этот датасет подсовываю DataGridView.DataSource и он все отображает.
А вот можно про адаптер поподрообнее? Т.е. все изменения получать через него?  Его надо как то привязывать?

Или я вообще не в ту область лезу? так понимаю что можно не использовать привязку данных напрямую, а просто получать изменения и самому их обрабатывать?
PM MAIL   Вверх
mr.DUDA
Дата 5.5.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Адаптер - только для получения датасета из БД или применения изменений датасета на базу данных. Если в приложении надо получить изменения, произошедшие с набором данных - дёргаем dataSet.GetChanges().


--------------------
user posted image
PM MAIL WWW   Вверх
darkness
Дата 7.5.2007, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 5.8.2006
Где: Москва

Репутация: нет
Всего: 1



По сабжу.
поправьте где я ошибаюсь:
имеем примерно след код:
Код

MySqlDataAdapter adap=new MySqlDataAdapter("SELECT * FROM STUDENTS", conn);
adap.Fill(ds, "Studi");

// имеем некий GridView, gD1 к примеру,
// теперь прикручиваем данные из датасета а конкретнее из таблицы "Studi" к нему

gD1.DataSource=ds.Tables["Studi"];      


т.к. DataSet GridView это классы, представляющие из себя
ссылочные типы следовательно  gD1.DataSource ссылается туда же что ds.Tables["Studi"]....
и любое изменение пользователем данных на Гриде отражается и на  самой  таблице...

Щёлкаем кнопку "сохранить" для вступления изменений в силу:
Код

ds.GetChanges();  //тут обновляется сам ДатаСэт, но что с БД?

загвоздка у меня в том, как обновить саму БД.... Предположим мы исправили две строки и одну добавили,
как получить доступ именно к тем элементам которые были изменены (Добавлены), чтобы уже на основании этого форимровать запросы UPDATE INSERT ???

Вообщем немного запутался... 


Это сообщение отредактировал(а) darkness - 7.5.2007, 06:43
--------------------
Вина каких стран Вы предпочитаете в это время суток?     (Булгаков. "Мастер и Маргарита") 
PM MAIL   Вверх
mr.DUDA
Дата 7.5.2007, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Полученный из GetChanges датасет отдаём адаптеру в метод Update:

Код
adap.Update (ds.GetChanges( ));



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1140 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.