threadw Ответов: 1

Bindingsource с отношением не работает при добавлении новой записи


У меня есть форма, которая имеет определенный набор текстовых полей и элемент управления DataGrid, я в настоящее время установки 2 обязательных источников и наборов данных, содержащая 2 таблицы и связи, первый БС хозяин БС, все текстовые поля в форме являются обязательными к этой БС, второй БС источник данных привязан к первой БС и datamember устанавливается связь, элемент управления DataGrid привязан к этой БС.

Операция выбора работает нормально, операции обновления тоже работают нормально, проблема возникает с сохранением при добавлении новой записи, первый BS вообще не сохраняет данные, а дочерний сохраняет запись, но поле отношения сохраняется с -1, очевидно, это потому, что родитель не установлен во время сохранения, поэтому правильное поле ID не ретранслируется.

Что я уже пробовал:

Я пробовал метод Addnewrow безрезультатно, я пробовал AcceptChanges, GetChanges и т.д. безрезультатно, tableadapter.update просто не сохранит данные обратно в БД, никакой ошибки не будет , я пытался отлаживать с помощью Onrowupdating и RowUpdated безрезультатно, соединение в порядке, адаптер таблицы имеет все команды ( Insert, update, Delete, Select). я пробовал использовать tableadaptermanager безрезультатно.

последнее, что я только что попробовал, - это использовать транзакции, и все равно они не сохраняются обратно в БД.

Короче говоря, вопрос будет заключаться в том, как правильно настроить такой сценарий: т. е.

2 Таблицы (Заказы, Заказано)
1 набор данных с 2 таблицами и связь по полю "Кодзаказа"
2 таблицы адаптеры по одному для каждой таблицы
2 bindingsources : один связывает текстовые поля заказов и один связывает datagrid для деталей заказов.

Я знаю, как сделать это вручную, что я хотел бы знать, так это как автоматизировать все это с помощью bindingsources, так как в этом весь смысл, и выполнение этого вручную разрушит цель, которую я ищу здесь.

1 Ответов

Рейтинг:
0

Gerry Schmitz

Если вы не можете обновить "все 3", то просто попробуйте "заказы" сами по себе. Если это сработает, и т. д.

Вы не показываете никакого кода. Можно только догадываться, в чем ваша проблема.

Детали, очевидно, зависят от заказов. Заказы не добавляются. То, что следует дальше, не имеет значения.


threadw

Спасибо Джерри за ваш ответ, ниже я вставляю код для сохранения btn , который у меня есть, я не публиковал код раньше, а просто абстрактный, потому что код слишком большой, посмотрите и скажите мне, если вы видите что-то, что я мог бы пропустить код, как у меня есть прямо сейчас, что является последним, что я делал, пытаясь транзакции безрезультатно.


Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
Dim updatecount As Integer
Try
If TxtRecipeName.Text = "" Then
MessageBox("Please Fill-in Product Code field", "Validación")
TxtRecipeName.Focus()
Exit Sub
'ElseIf TxtCreatedBy.Text = "" Then
' MessageBox("Please Fill-in Prodcut Name field", "Validación")
' TxtCreatedBy.Focus()
' Exit Sub
'ElseIf TxtPortionNumber.Text = "" Then
' MessageBox("Please Fill-in Barcode Field", "Validación")
' TxtPortionNumber.Focus()
' Exit Sub
'ElseIf TxtPortionPrice.Text = "" Then
' MessageBox("Please Select category", "Validación")
' TxtPortionPrice.Focus()
' Exit Sub
'ElseIf TxtRecipePrice.Text = "" Then
' MessageBox("Please Select Supplier", "Validación")
' TxtRecipePrice.Focus()
' Exit Sub
' 'ElseIf TxtUnitPrice.Text = "" Then
' ' MessageBox("Please Fill-in unit Price field", "Validación")
' ' TxtUnitPrice.Focus()
' ' Exit Sub
'ElseIf TxtPortionCost.Text = "" Then
' MessageBox("Please Fill-in Stocks On Hand field", "Validación")
' TxtPortionCost.Focus()
' Exit Sub
' 'ElseIf TxtRL.Text = "" Then
' ' MessageBox("Please Fill-in Reorder Level field", "Validación")
' ' TxtRL.Focus()
' 'Exit Sub
End If

If adding = True Then
'ConnDB()
'RecipeDataSet.AcceptChanges()

RecipeBindingSource.EndEdit()
RecipeRelationBindingSource.EndEdit()
Using updateTransaction As System.Transactions.TransactionScope = New System.Transactions.TransactionScope()
DeleteRecipeIngredients()
DeleteRecipe()
AddNewRecipe()
AddNewRecipeIngredients()
updateTransaction.Complete()
RecipeDataSet.AcceptChanges()
End Using
'RecipeRelationBindingSource.EndEdit()
'updatecount = RecipeTableAdapter.Update(RecipeDataSet.Tables("Recipe"))
'RecipeingredientsTableAdapter.Update(RecipeDataSet)
' updatecount = updatecount + RecipeingredientsTableAdapter.Update(RecipeDataSet.RecipeIngredients)
'MessageBox(updatecount.ToString, "prueba")
'RecipeDataSet.AcceptChanges()
'RecipeBindingSource.ResetBindings(False)
' RecipeRelationBindingSource.ResetBindings(False)
FrmMain.ActionInfo.Caption = "Receta Agregada Exitosamente"
DisableAddDeleteIngredients()
'conn.Close()

Else
If RecipeDataSet.HasChanges Then
RecipeBindingSource.EndEdit()
RecipeRelationBindingSource.EndEdit()
updatecount = RecipeTableAdapter.Update(RecipeDataSet.Recipe)
updatecount = updatecount + RecipeingredientsTableAdapter.Update(RecipeDataSet.RecipeIngredients)
RecipeBindingSource.ResetBindings(False)