Я осмотрелся и не могу найти то, что мне нужно.Связать combobox с родительским DataRelation и обновить, когда изменения 2-го родителя
У меня есть БД с (другие другие) 3 таблицы.
SchemeType
Scheme
Type
SchemeType
содержит внешние ключи первичных ключей как Scheme
и Type
У меня есть .NET 3.5 WinForm, содержащую 2 выпадающие списки.
Один отображает Schemes
Я хотел бы другие, чтобы отобразить отчетливые Types
, которые существуют в таблице SchemeType
для этого выбранного Scheme
.
У меня есть DataSet
, который содержит все записи для всех трех таблиц и настроил DataRelations для отношений первичного и внешнего ключей.
Я использую BindingSources для заполнения comboboxes, но не могу решить, как получить комбобокс Type
, чтобы обновить его содержимое, когда я изменяю поле со списком Scheme
.
Я могу сделать это с прямым отношением родитель-ребенок, но не может решить, как закодировать отношение родительский-дочерний-родительский.
Вот мой код, с ненужными вещи раздели
Dim DS As New DataSet("myDS")
Dim SchemeBndSrc As New BindingSource
Dim TypeBndSrc As New BindingSource
Using cmd As New SqlCommand("myStroedProc", _conn)
cmd.CommandType = CommandType.StoredProcedure
Using adp As New SqlDataAdapter(cmd)
adp.Fill(DS)
End Using
End Using
' Name the tables
DS.Tables(0).TableName = "Scheme"
DS.Tables(1).TableName = "Type"
DS.Tables(2).TableName = "SchemeType"
Dim rel As New DataRelation("Scheme-SchemeType", _
DS.Tables("Scheme").Columns("SchemeID"), _
DS.Tables("SchemeType").Columns("SchemeID"), _
True)
Dim rel2 As New DataRelation("Type-SchemeType", _
DS.Tables("Type").Columns("TypeID"), _
DS.Tables("SchemeType").Columns("TypeID"), _
True)
DS.Relations.Add(rel)
DS.Relations.Add(rel2)
' Scheme
' Set up the binding source
SchemeBndSrc.DataSource = DS
SchemeBndSrc.DataMember = "Scheme"
' Bind the bindingsource to the combobox
cboScheme.ValueMember = "SchemeId"
cboScheme.DisplayMember = "SchemeName"
cboScheme.DataSource = SchemeBndSrc
cboScheme.SelectedIndex = -1
' Type
' Set up the binding source
TypeBndSrc.DataSource = SchemeBndSrc
TypeBndSrc.DataMember = "Type-SchemeType"
' Bind the bindingsource to the combobox
cboType.ValueMember = "TypeID"
cboType.DisplayMember = "TypeDesc"
cboType.DataSource = TypeBndSrc
cboType.SelectedIndex = -1
Тип выпадающий не содержит каких-либо предметов, несмотря на то, должно быть, по меньшей мере, один элемент в нем. Если я поменяю DataRelation вокруг, он не добавит его в DataSet, поскольку родительский в этом случае (SchemeType) не имеет уникальных записей для TypeID.
Может ли кто-нибудь помочь мне, пожалуйста?
А, спасибо. Я боялся, что это будет ручная работа, но мне хотелось проверить, нет ли автоматического способа, которым я отсутствовал. Я прав, что я не смогу также привязать выбранные значения каждой комбо, чтобы иметь возможность использовать процесс SQLDataAdapter.Update? –
Я не уверен на 100%, что последствия будут без тестирования. Я не уверен, что вы можете использовать привязку к фильму и обновлению. – jmcilhinney