Vb.net 基于具有ForeignKeyConstraint的父数据表筛选子数据表
我在SQLServer中有一个存储过程,它将两个表返回到我的VB.Net表单。这两个表填充两个网格。我的数据表是父表和子表。我想按第一个网格过滤第二个网格。换句话说,当用户在第一个网格中选择一条记录时,第二个网格必须根据以编程方式声明的主键进行过滤。 但它不起作用! 我的代码如下所示:Vb.net 基于具有ForeignKeyConstraint的父数据表筛选子数据表,vb.net,Vb.net,我在SQLServer中有一个存储过程,它将两个表返回到我的VB.Net表单。这两个表填充两个网格。我的数据表是父表和子表。我想按第一个网格过滤第二个网格。换句话说,当用户在第一个网格中选择一条记录时,第二个网格必须根据以编程方式声明的主键进行过滤。 但它不起作用! 我的代码如下所示: Dim DAContractorDateTreeView As New SqlDataAdapter("spTimeSheetReportDateTree", My.Settings.SyncConnection
Dim DAContractorDateTreeView As New SqlDataAdapter("spTimeSheetReportDateTree", My.Settings.SyncConnectionString)
Dim DSContractorDate As New DataSet
Dim fkeyConstraint As ForeignKeyConstraint
Dim Binding1, Binding2 As New BindingSource
Sub LoadContractorsDate(MyParameter As Integer)
Try
DAContractorDateTreeView.SelectCommand.CommandType = CommandType.StoredProcedure
'Some Codes for adding parameters
DAContractorDateTreeView.Fill(DSContractorDate)
'Declare parent column and child column variables.
Dim ParentColumn, ChildColumn As DataColumn
Dim primaryKey(1) As DataColumn
primaryKey(0) = DSContractorDate.Tables(2).Columns("TiSheID")
DSContractorDate.Tables(2).PrimaryKey = primaryKey
'Set parent and child column variables.
ParentColumn = DSContractorDate.Tables(0).Columns("TiSheID")
ChildColumn = DSContractorDate.Tables(1).Columns("TiSheID")
fkeyConstraint = New ForeignKeyConstraint("FKConstraintNaID", ParentColumn, ChildColumn)
'Set null values when a value is deleted.
fkeyConstraint.DeleteRule = Rule.Cascade
fkeyConstraint.UpdateRule = Rule.Cascade
fkeyConstraint.AcceptRejectRule = AcceptRejectRule.Cascade
'Add the constraint, and set EnforceConstraints to true.
DSContractorDate.Tables(1).Constraints.Add(fkeyConstraint)
DSContractorDate.EnforceConstraints = True
Binding1.DataSource = DSContractorDate.Tables.Item(0)
GridControlExit.DataSource = Binding1
Binding1.DataMember = "TiSheID"
Binding2.DataMember = "FKConstraintNaID" 'fkeyConstraint.ConstraintName
MsgBox(fkeyConstraint.ConstraintName)
Binding2.DataSource = Binding1
GridControlDetail.DataSource = Binding2
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
我对从存储过程加载数据没有任何问题。
请帮帮我。提前感谢。您现在可能已经找到了解决方案,但Microsoft的目标是:
- 将新数据集添加到项目中
- 打开它并在曲面上单击鼠标右键
- 为
select*from parent
- 对孩子也这样做。如果数据库包含外键,则会自动创建数据关系。如果不是,则高亮显示父级中链接到子级的列,然后从列名旁边的灰色方框中拖动一条线,并将其放到相关子列名上,确保datarelation窗口设置正确
- 保存数据集并转到表单
- 打开数据源窗口(查看菜单,其他窗口),展开每个节点并查看它。您将看到两个孩子,一个在家长之下,另一个不在家长之下 *将这三个网格全部放在表单上,运行应用程序
UserStableApter.fillbylastname(appDataSet.users,“Smi%”)