none
BindingNavigator RRS feed

  • Вопрос

  • BindingNavigator работает в DataGridView добавляет и удаляет строки а как сделать что бы эти строки удалял и добавлял в таблице базы данных через DataGridView на visual basic, в делфи добавить строку Table1.InsertRecord([StrToInt(Edit1.Text), Edit2.text,Null,Null]); а как её добавить в Visual Basic?


    23

    • Перемещено Abolmasov Dmitry 22 февраля 2012 г. 8:18 (От:Веб)
    21 февраля 2012 г. 8:33

Ответы

  • Была точно такая же проблема. Лечил так:

    1. Открываем файл (в вашем случае) DataBase1DataSet1.xsd

    2. Нажимаем правой кнопкой на базу данных в открывшемся окне и выбираем пункт "Добавить - Запрос..."

    3. Оставляем как есть и жмем далее. Выбираем пункт UPDATE и жмем далее.

    4. Убираем все что написано в окошке и ниже нажимаем кнопку "Построитель запросов..."

    5. В диалоге посторителя выбираем нужную базу данных, затем отмечаем все столбцы в верхней части окна. В средней части окна в колонку "Новое значение" пишем "@Название строки" Например если строка у вас называется Name, то в новое значение пишем @Name. Так делаем для всех строк, которые нужно обновлять на сервере (обычно все). Так же не забываем про колонку фильтр. По ней будет осуществятся поиск нужной записи для обновления. Это поле заполняйте у той строки по которой идентифицируется запись (например Name или ID). Поле фильтр так же ставится с @

    6. Жмем ОК и в мастере Далее. Потом выбираете имя и прочие мелочи по вашему усмотрению.

    7. Созданный запрос добавится к вашему TableAdapter и его можно будет вызвать. Выбирать нужно не просто Update, а именно созданный вами запрос.

    P.S. Создайте резервную копию базы данных на сервере, так как не правильно настроенная Update может удалить все данные из БД


    Влюблен в WPF Не пишу на C#


    • Изменено LXGDARKEditor 28 февраля 2012 г. 15:29
    • Предложено в качестве ответа Abolmasov Dmitry 29 февраля 2012 г. 6:34
    • Помечено в качестве ответа Abolmasov Dmitry 5 марта 2012 г. 12:27
    28 февраля 2012 г. 15:26
    Отвечающий
  • Здравствуйте.

    Давайте сначала: у вас есть DataGridView, BindingNavigator.

    На форму кидаете BindingSource и в нем в режиме мастера выбираете подлючение к БД и таблицу, которую хотите отобразить. После этого автоматически генерируются классы БДDataSet и ТаблицаTableAdapter.

    БДDataSet уже есть объект, его создавать не нужно, а вот ТаблицаTableAdapter из Toolbox-а нужно кинуть на форму.

    Далее включаем автогенерацию столбцов у DataGridView:

    Me.DataGridView1.AutoGenerateColumns = True

    Заполняем DataSet с помощью TableAdapter-а:

    Me.ТелефоныTableAdapter.Fill(Me.Database1DataSet1.Телефоны)

    Привязываем данные:

    Me.ТелефоныBindingSource.DataSource = Me.Database1DataSet1.Телефоны
    Me.BindingNavigator1.BindingSource = Me.ТелефоныBindingSource
    Me.DataGridView1.DataSource = Me.ТелефоныBindingSource

    Создаем кнопку Save и по ее клику сохраняем данные в БД:

    Me.ТелефоныTableAdapter.Update(Me.Database1DataSet1)

    • Изменено Abolmasov Dmitry 22 февраля 2012 г. 9:32
    • Помечено в качестве ответа Abolmasov Dmitry 5 марта 2012 г. 12:28
    22 февраля 2012 г. 9:31

Все ответы

  • Здравствуйте.

    У вас веб-приложение? Вы случайно не перепутали раздел Веб с разделом Настольные ПК?

    Вам нужно создать BindingSource, который будет служить источников данных для DataGridView и в тоже время привязан к BindingNavigator:

    Me.BindingSource1.DataSource = ds.Tables(0)
    Me.DataGridView1.DataSource = Me.BindingSource1
    Me.BindingNavigator1.BindingSource = Me.BindingSource1

    А BindingSource уже будет связан с базой данных.


    Для связи [mail]

    21 февраля 2012 г. 11:50
  • А ds как представлять? Dim ds as ?

    23

    21 февраля 2012 г. 15:01
  • Не работает, даже базу данных перестал загружать.

    Private

    SubForm1_Load(sender AsSystem.Object, e AsSystem.EventArgs) HandlesMyBase.Load


           

    'TODO: данная строка кода позволяет загрузить данные в таблицу "Database1DataSet1.Телефоны". При необходимости она может быть перемещена или удалена.


           

    Dimds AsDataSet= NewDataSet("Телефоны")


           

    Me.ТелефоныTableAdapter.Fill(Me.Database1DataSet1.Телефоны)


           

    Me.ТелефоныBindingSource.DataSource = ds.Tables("Телефоны")


           

    Me.DataGridView1.DataSource = Me.ТелефоныBindingSource


           

    Me.BindingNavigator1.BindingSource = Me.ТелефоныBindingSource



       

    EndSub


    23

    22 февраля 2012 г. 6:35
  • Здравствуйте.

    Давайте сначала: у вас есть DataGridView, BindingNavigator.

    На форму кидаете BindingSource и в нем в режиме мастера выбираете подлючение к БД и таблицу, которую хотите отобразить. После этого автоматически генерируются классы БДDataSet и ТаблицаTableAdapter.

    БДDataSet уже есть объект, его создавать не нужно, а вот ТаблицаTableAdapter из Toolbox-а нужно кинуть на форму.

    Далее включаем автогенерацию столбцов у DataGridView:

    Me.DataGridView1.AutoGenerateColumns = True

    Заполняем DataSet с помощью TableAdapter-а:

    Me.ТелефоныTableAdapter.Fill(Me.Database1DataSet1.Телефоны)

    Привязываем данные:

    Me.ТелефоныBindingSource.DataSource = Me.Database1DataSet1.Телефоны
    Me.BindingNavigator1.BindingSource = Me.ТелефоныBindingSource
    Me.DataGridView1.DataSource = Me.ТелефоныBindingSource

    Создаем кнопку Save и по ее клику сохраняем данные в БД:

    Me.ТелефоныTableAdapter.Update(Me.Database1DataSet1)

    • Изменено Abolmasov Dmitry 22 февраля 2012 г. 9:32
    • Помечено в качестве ответа Abolmasov Dmitry 5 марта 2012 г. 12:28
    22 февраля 2012 г. 9:31
  • Ошибка призапуске

    Public

    ClassForm1

    PrivateSubForm1_Load(sender AsSystem.Object, e AsSystem.EventArgs) HandlesMyBase.Load

    'TODO: данная строка кода позволяет загрузить данные в таблицу "Database1DataSet1.Телефоны". При необходимости она может быть перемещена или удалена.

    Me.ТелефоныTableAdapter.Fill(Me.Database1DataSet1.Телефоны)



       

    EndSub



       

    PrivateSubBindingNavigatorAddNewItem_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesBindingNavigatorAddNewItem.Click


       

    EndSub



      


       

    PrivateSubBindingNavigatorDeleteItem_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesBindingNavigatorDeleteItem.Click



       

    EndSub



       

    PrivateSubButton1_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesButton1.Click


           

    Me.ТелефоныTableAdapter.Update(Me.Database1DataSet1)


       

    EndSub

    PrivateSubDataGridView1_CellContentClick(sender AsSystem.Object, e AsSystem.Windows.Forms.DataGridViewCellEventArgs) HandlesDataGridView1.CellContentClick

    Me.DataGridView1.AutoGenerateColumns = True

    Me.ТелефоныBindingSource.DataSource = Me.Database1DataSet1.Телефоны

    Me.BindingNavigator1.BindingSource = Me.ТелефоныBindingSource

    Me.DataGridView1.DataSource = Me.ТелефоныBindingSource

    EndSub

    End

    Class


    23

    22 февраля 2012 г. 14:18
  • Попробуйте переформировать заново источник данных. Т.е. с помощью мастера снова выбрать базу данных и таблицу, которую хотите изменять.

    Если будет такая же ошибка, то придется вручную задать комманду Update для TableAdapter, это задается через свойство UpdateCommand.

    Если это сделать сложно, то выложите сюда значение свойста SelectCommand, попробуем помочь разобраться


    Для связи [mail]

    28 февраля 2012 г. 13:55
  • Была точно такая же проблема. Лечил так:

    1. Открываем файл (в вашем случае) DataBase1DataSet1.xsd

    2. Нажимаем правой кнопкой на базу данных в открывшемся окне и выбираем пункт "Добавить - Запрос..."

    3. Оставляем как есть и жмем далее. Выбираем пункт UPDATE и жмем далее.

    4. Убираем все что написано в окошке и ниже нажимаем кнопку "Построитель запросов..."

    5. В диалоге посторителя выбираем нужную базу данных, затем отмечаем все столбцы в верхней части окна. В средней части окна в колонку "Новое значение" пишем "@Название строки" Например если строка у вас называется Name, то в новое значение пишем @Name. Так делаем для всех строк, которые нужно обновлять на сервере (обычно все). Так же не забываем про колонку фильтр. По ней будет осуществятся поиск нужной записи для обновления. Это поле заполняйте у той строки по которой идентифицируется запись (например Name или ID). Поле фильтр так же ставится с @

    6. Жмем ОК и в мастере Далее. Потом выбираете имя и прочие мелочи по вашему усмотрению.

    7. Созданный запрос добавится к вашему TableAdapter и его можно будет вызвать. Выбирать нужно не просто Update, а именно созданный вами запрос.

    P.S. Создайте резервную копию базы данных на сервере, так как не правильно настроенная Update может удалить все данные из БД


    Влюблен в WPF Не пишу на C#


    • Изменено LXGDARKEditor 28 февраля 2012 г. 15:29
    • Предложено в качестве ответа Abolmasov Dmitry 29 февраля 2012 г. 6:34
    • Помечено в качестве ответа Abolmasov Dmitry 5 марта 2012 г. 12:27
    28 февраля 2012 г. 15:26
    Отвечающий
  • LXGDARK

    Здравствуйте! У меня такая же проблема. Спасибо за Ваше описание, только я не могу понять, какие параметры нужно вставить в созданный запрос

    Me.TableAdapter.UpdateQuery(?????);

    У меня таблица из 3-х столбцов ID, LastName, FirstName.

    Большое спасибо!

    11 апреля 2013 г. 10:42