我在VS 2005数据集设计器中创建了一个强类型数据集。 在一对多关系中,有两个表彼此相关:Claim和ClaimDetail。设计器自动创建一个函数GetClaimDetailRows,它返回ClaimRow的所有ClaimDetailRows。 为什么此数组的长度始终为0? 因为ClaimDetail包含超过40万行,所以我在调用GetClaimDetailRows之前没有填充它,但是已经配置了它的select命令,它只需要参数idData来填充相关记录。但这似乎不起作用,因为ClaimDetail-Datatable是空的。
alt text http://www.bilder-hochladen.net/files/big/4709-kt.jpg
ClaimRow-Class中自动生成的函数,它返回所有相关的ClaimDetailRows:
Public Function GetClaimDetailRows() As ClaimDetailRow()
If (Me.Table.ChildRelations("Claim_ClaimDetail") Is Nothing) Then
Return New ClaimDetailRow(-1) {}
Else
Return CType(MyBase.GetChildRows(Me.Table.ChildRelations("Claim_ClaimDetail")),ClaimDetailRow())
End If
End Function
调试时,我看到它跳转到else块但返回0行。 我是否必须先为每个索赔填写Claimdetail-Datatable(ClearBeforeFill = True)?但是我不再需要使用这个功能了。
UPDATE :我现在在调用Child-function之前填充Datatable(ClearBeforeFill = True)并且它可以工作。但我不明白为什么它不能抛出异常(可选)当我尝试访问子关系而没有填充数据表(至少有0行)。而不是它返回0行可能是正确的或不正确的并且难以检测。这是缺乏设计还是我错过了什么?
答案 0 :(得分:3)
因为生成的GetChildRows()假定(所有)子记录被加载到内存中。
您必须在客户端部分(表单)中编写一些代码。您可以使用BindingSource.CurrentChanged并将相应的记录填充到子表中。