Проверка datatable имеет строку в выбранном индексе с помощью цикла

#vb.net

#vb.net

Вопрос:

Проверьте, есть ли у datatable строка в выбранном индексе, используя цикл for

я хочу проверить здесь, имеет ли datatable строку с тем значением ‘i’, которое исходит из цикла

    Private Sub btnAct_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAct.Click


    Gross = 0
    Dim i As Integer

    Dim dr As DataRow = Nothing
    Act1 = dt.Rows(0)("Account")
    Act2 = dt.Rows(0)("Account")

    'Next
    For i = 0 To 100 Step 1
        If ( i Want to check here if datatable has row at that value of 'i' which comes from loop) Then

else

 If (Act1 = Act2) Then

        Else

            Act1 = dt.Rows(i - 1)("Account")

            For k As Integer = 0 To (i - 1) Step 1

                Act2 = Convert.ToString(dt.Rows(k)("Account"))

                If (Act1 = Act2) Then

                    Gross  = Convert.ToInt32(dt.Rows(k)("Total_Gross_Amount"))

                End If

            Next

            dr = dt.NewRow()

            dr("Account") = "Total"
            dr("Total_Gross_Amount") = Gross
            Gross = 0
            dt.Rows.InsertAt(dr, i)
            Act2 = Convert.ToString(dt.Rows(i   1)("Account"))

        End If
        Act1 = Convert.ToString(dt.Rows(i   1)("Account"))

        dt(i)("Sno") = i   1
    Next


        End If




    'Next

End Sub
  

У меня есть datatable, и я хочу проверить, что в нем есть строка с выбранным значением, которое поступает из цикла for

Комментарии:

1. отформатируйте свой вопрос, чтобы лучше понять, дайте более подробное описание

2. я хочу проверить datatable в цикле for, у которого конец равен 100, я хочу проверить, есть ли в таблице данных строка с этим значением, если она не имеет значения в этом индексе, тогда она проверит и выйдет, иначе она будет работать

3. if dt.rows(i).item("columnName") <> 0 или if dt.rows(i).item("columnName") <> "

Ответ №1:

Просто — LINQ на помощь:

 For i = 0 To 100
  ' Functionally equivalent to
  ' dt.Rows.Cast(Of DataRow)().ElementAtOrDefault(i).
  Dim rowAtIndex = dt.AsEnumerable().ElementAtOrDefault(i)

  If rowAtIndex IsNot Nothing Then
    ' Do something with the row.
  End If
Next
  

Или немного менее выразительную, но лучше оптимизированную версию:

 For i = 0 To 100
  Dim rowAtIndex As DataRow = Nothing

  If i < dt.Rows.Count Then
    rowAtIndex = dt.Rows(i)

    ' Do something with the row.
  Else
    ' Row at index does not exist.
  End If
Next
  

Однако здесь возникает большой вопрос: действительно i ли нужно выходить за dt.Rows.Count - 1 рамки (который является индексом последней строки в DataTable )? Если нет, я бы предпочел изменить цикл на

 For i = 0 To dt.Rows.Count - 1
  

Комментарии:

1. на самом деле сначала я делал для i = 0 до dt.rows.count-1, но во время выполнения возникла проблема: количество строк в datatable увеличивается, но в цикле оно принимает значение, которое было во время компиляции до нажатия кнопки, например, datatable имеет 25 строк после нажатия кнопки в for строки цикла увеличиваютсядо 35 , но цикл насчитывает только до 25, поэтому он редактирует только 25 строк, а остальные строки такие же, как и были. я выполнил эту задачу на c # с помощью dt.rows.count-1, она работала, но я не знаю, в чем проблема vb.net . @Кирилл Шленский