Обновление базы данных из элементов управления DataBound - PullRequest
1 голос
/ 04 ноября 2008

В настоящее время я создаю WinForm в VB.NET, привязанную к базе данных доступа.

По сути, у меня есть две формы: одна - это форма поиска, используемая для поиска в базе данных, а другая - форма сведений. Вы запускаете поиск в searchForm, и он возвращает список первичных ключей и несколько других идентифицирующих значений. Затем дважды щелкните запись, которую хотите просмотреть, и она загрузит форму сведений.

Форма Подробности содержит набор элементов управления с привязкой к данным для отображения данных: в основном текстовые поля и флажки. Я установил его, используя пользовательский интерфейс для построения формы, а затем установил свойство DataBindings каждого элемента управления в значение «TblPropertiesBindingSource -», где name name - это одно из значений в таблице (например, PropertyID или HasWoodFloor).

Затем, когда вы дважды щелкаете запись в форме поиска, я обрабатываю событие, анализируя Первичный ключ (PropertyID) из выбранной строки, а затем сохраняя его в форме сведений:

Примечание. Подробно - это форма сведений, которая открывается для отображения информации

Private Sub propView_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles propView.CellDoubleClick
        Dim detail As frmPropertiesDetail = New frmPropertiesDetail
        detail.id = propView.Rows(e.RowIndex).Cells(0).Value
        detail.Show()
    End Sub

Затем, после загрузки формы сведений, он устанавливает фильтр на BindSource следующим образом:

TblPropertiesBindingSource.Filter() = "PropertyID=" & id

Пока это прекрасно работает. Все элементы управления в форме сведений будут отображать правильную информацию. Проблема в обновлении изменений.

Сценарий: Если у меня есть пользователь, загружающий данные, скажем, для свойства 10001, он отобразит описание в текстовом поле с именем descriptionBox, которое идентично значению значения описания для этой записи в базе данных. Я хочу, чтобы пользователь затем мог изменить текст текстового поля (что он в настоящее время может делать) и нажать кнопку сохранения (saveBut), чтобы форма обновила все значения в элементах управления в базе данных.

Теоретически, это должно быть сделано, поскольку элементы управления являются объектами DataBound, поэтому я могу избежать написания кода, в котором каждая запись в строке базы данных принимает значение выровненного элемента управления.

Я пытался вызвать PropertiesTableAdapter.Update (PropertiesBindingSource.DataSource), но, похоже, это не так.

1 Ответ

0 голосов
/ 04 ноября 2008

Хорошо, я смог понять это, выбрав какой-то код, который я украл у друга.

Все было нормально, проблема была в обновлении

Когда я сохранял данные, я звонил просто:

Me.TblProptertiesTableAdapter.Update(Me.TblPropertiesBindingSource.DataSource)

Правильный код, без изменения чего-либо еще:

Me.Validate()
Me.TblPropertiesBindingSource.EndEdit()
Me.TblPropertiesTableAdapter.Update(Me.RentalPropertiesDataSet.tblProperties)
Me.RentalPropertiesDataSet.AcceptChanges()

Где RentalPropertiesDataSet - это база данных, откуда берется TblProperties. Чтобы это работало, убедитесь, что TblPropertiesBindingSource.DataSource имеет значение RentalPropertiesDataSet.Properties. Это было автоматически установлено для меня VS08, когда он создал BindingSource.

По сути, мне нужно было указать BindingSource прекратить разрешать редактирование полей. Затем мы сохраняем изменения в базе данных и, наконец, сообщаем базе данных, чтобы они были приняты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...