DataTable.Rows.Count всегда возвращает 0 - VB.NET - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь заполнить ячейки DataGridView информацией из двух (родительской, дочерней таблиц). Все работает нормально, кроме этой части table.Rows.Count. Он всегда возвращает 0, независимо от того, что у меня есть одна запись в таблице.

Это код:

    Private Sub Query__tbl_purchase_order_articlesDataGridView_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles Query__tbl_purchase_order_articlesDataGridView.CellEndEdit

    Dim table As DataTable = Orders_DBDataSet.Tables("tbl_list_of_articles")


    Dim selectedRowCount As Integer = Query__tbl_purchase_order_articlesDataGridView.CurrentCell.RowIndex 
    Dim art_ID As Integer = CInt(Query__tbl_purchase_order_articlesDataGridView.Rows(selectedRowCount).Cells(0).Value)

    Dim art_ttl As String
    Dim art_ttl_tr As String
    Dim mu As String

    Dim art_ttl_i As Integer
    Dim art_ttl_tr_i As Integer
    Dim mu_i As Integer

    Dim art_ID_t_i As Integer
    Dim art_ttl_t_i As Integer
    Dim art_ttl_tr_t_i As Integer
    Dim mu_t_i As Integer

    Dim i As Integer

    'search for column index in DataGridView
    For i = 0 To Query__tbl_purchase_order_articlesDataGridView.Columns.Count - 1
        If Query__tbl_purchase_order_articlesDataGridView.Columns(i).HeaderText.ToString = "article_name" Then
            art_ttl_i = i
        End If
        If Query__tbl_purchase_order_articlesDataGridView.Columns(i).HeaderText.ToString = "article_name_tr" Then
            art_ttl_tr_i = i
        End If
        If Query__tbl_purchase_order_articlesDataGridView.Columns(i).HeaderText.ToString = "masurement_unit" Then
            mu_i = i
        End If
    Next

    'search for column index in "table"
    For i = 0 To table.Columns.Count - 1
        If table.Columns(i).ColumnName.ToString = "article_ID" Then
            art_ID_t_i = i
        End If
        If table.Columns(i).ColumnName.ToString = "article_name" Then
            art_ttl_t_i = i
        End If
        If table.Columns(i).ColumnName.ToString = "article_name_tr" Then
            art_ttl_tr_t_i = i
        End If
        If table.Columns(i).ColumnName.ToString = "masurement_unit" Then
            mu_t_i = i
        End If
    Next

    For i = 0 To table.Rows.Count
        If art_ID = CInt(table.Rows(i).Item(art_ID_t_i).ToString()) Then
            art_ttl = table.Rows(i).Item(art_ttl_t_i).ToString()
            art_ttl_tr = table.Rows(i).Item(art_ttl_tr_t_i).ToString()
            mu = table.Rows(i).Item(mu_t_i).ToString()

            Query__tbl_purchase_order_articlesDataGridView.Rows(selectedRowCount).Cells(art_ttl_i).Value = art_ttl
            Query__tbl_purchase_order_articlesDataGridView.Rows(selectedRowCount).Cells(art_ttl_tr_i).Value = art_ttl_tr
            Query__tbl_purchase_order_articlesDataGridView.Rows(selectedRowCount).Cells(mu_i).Value = mu

            Exit For
        End If

    Next

End Sub

Кроме того, я привязал, чтобы проверить это вот так, но результат тот же самый. Он может найти индекс таблицы, но всегда возвращает 0 в качестве количества строк таблицы.

'test ========================================
    Dim x, y As Integer
    For x = 0 To Orders_DBDataSet.Tables.Count - 1
        If Orders_DBDataSet.Tables(x).TableName.ToString = "tbl_list_of_articles" Then
            y = x
        End If
    Next

    x = 0

    For Each row As DataRow In table.Rows
        x = x + 1
    Next
    '============================================
    x = Orders_DBDataSet.Tables(y).Rows.Count

1 Ответ

1 голос
/ 14 июля 2020

В большинстве случаев это происходило со мной, потому что я фактически не использовал экземпляр набора данных, "связанный" с формой. Что это значит? Вы либо не заполняете экземпляр набора данных, привязанный к форме в событии Load, либо заполняете его, но каким-то образом используете другой его экземпляр. Это имеет больше шансов произойти, если вы также отправляете данные между формами.

...