数据集中的relation-table始终返回0行

时间:2010-07-19 08:36:09

标签: c# .net vb.net ado.net dataset

我在VS 2005数据集设计器中创建了一个强类型数据集。 在一对多关系中,有两个表彼此相关:Claim和ClaimDetail。设计器自动创建一个函数Ge​​tClaimDetailRows,它返回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行可能是正确的或不正确的并且难以检测。这是缺乏设计还是我错过了什么?

1 个答案:

答案 0 :(得分:3)

因为生成的GetChildRows()假定(所有)子记录被加载到内存中。

您必须在客户端部分(表单)中编写一些代码。您可以使用BindingSource.CurrentChanged并将相应的记录填充到子表中。