таблица отношений в наборе данных всегда возвращает 0 строк - PullRequest
1 голос
/ 19 июля 2010

Я создал строго типизированный набор данных в VS 2005 Dataset Designer.Существует две таблицы, которые связаны друг с другом в отношении один ко многим : Claim и ClaimDetail.Дизайнер автоматически создает функцию GetClaimDetailRows, которая возвращает все ClaimDetailRows для ClaimRow. Почему длина этого массива всегда равна 0? Поскольку ClaimDetail содержит более 40 миллионов строк, я не заполнил его до вызова GetClaimDetailRows, но настроил его selectcommand, чтобы он использовал параметр idData для заполнения только связанных записей,Но это, кажется, не работает, потому что ClaimDetail-Datatable пуст.

альтернативный текст 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 строк.Нужно ли мне сначала заполнять заявку-данные-данные (ClearBeforeFill = True) для каждой заявки?Но тогда мне больше не нужно использовать эту функцию.

ОБНОВЛЕНИЕ : Теперь я заполняю таблицу данных (ClearBeforeFill = True) перед тем, как вызвать функцию Child, и она работает.Но я не понимаю, почему он не может выдать исключение (необязательно), когда я пытаюсь установить доступ к дочернему отношению, не заполняя эту таблицу данных (по крайней мере, 0 строками).Вместо этого он возвращает 0 строк, которые могут быть правильными или неправильными и их трудно обнаружить.Это недостаток дизайна или я что-то упустил?

1 Ответ

3 голосов
/ 19 июля 2010

Поскольку сгенерированный GetChildRows () предполагает (все) дочерние записи загружаются в память.

Вам нужно написать некоторый код в клиентской части (Форма). Вы можете использовать BindingSource.CurrentChanged и заполнить соответствующие записи в дочерней таблице.

...