【问题标题】:How to iterate between two datatables in ASP.NET如何在 ASP.NET 中的两个数据表之间进行迭代
【发布时间】:2014-05-30 02:22:41
【问题描述】:

我有两个数据表(dtSF 和 CurveFitTable),其中包含我必须相乘的两个不同值。目标是生成一个数据表,其中包含来自两个不同数据表的两个值的乘积。扭曲的是,CurveFitTable 来自我已经定义的目录中的不同 csv 文件。

我打算做的是有一个像下图中的adjustedCopy表一样的数据表。不幸的是,我得到的是一个不断被覆盖的单个数据表,每当我尝试将它数据绑定到网格时,数据表似乎是空的。请帮忙。 T.T

这是我的代码:

     Dim adjusteddemandtable As New DataTable()
    Dim adjustedcopy As New DataTable()
    Dim multiply_SF As Double
    Dim adjusted_Demand As Double
    Dim initial_Demand As Double
    Dim basecurvestamp As Date

    adjusteddemandtable.Columns.Add("Base Curve", GetType(Date))
    adjusteddemandtable.Columns("Base Curve").SetOrdinal(0)
    adjusteddemandtable.Columns.Add("Adjusted_Demand", GetType(Double))
    Dim CurveFitTatble As New DataTable()

   Try

        For Each filename As String In System.IO.Directory.GetFiles(BackUpDirectory)

            CurveFitTatble = GetDataTabletFromCSVFile(filename)

            For Each row2 As DataRow In dtSF.Rows()
                For Each row As DataRow In CurveFitTatble.Rows()
                    initial_Demand = row(1)
                    basecurvestamp = row(0)
                    multiply_SF = row2(0)
                    adjusted_Demand = multiply_SF * initial_Demand

                    Dim rowa As DataRow = adjusteddemandtable.Rows.Add()
                    rowa(0) = basecurvestamp
                    rowa(1) = adjusted_Demand
                Next
            Next

            adjustedcopy.Merge(adjusteddemandtable, True, MissingSchemaAction.AddWithKey)  

        Next

        GridView1.DataSource = adjustedcopy
        GridView1.DataBind()

    Catch ex As Exception
        ErrorMessageBox(ex.Message)
    End Try

我想,我遗漏了一些东西或忽略了一个重要步骤。请指教。提前致谢。

【问题讨论】:

  • 这是 Visual Basic 而不是 C#
  • 嗯,是的。对不起。建议使用标签。
  • 不用担心我只是突出显示标签更改
  • 您是否只想将相应索引处的行中的值相乘,例如每个表中第一行的两个值,然后是每个表中第二行的两个值,但不是一个表中的第一行和另一个表中的第二行?如果是这样,那么您应该使用单个 for 循环,而不是嵌套的 foreach 循环。嵌套循环意味着您将一个表中的每一行与另一个表中的每一行组合在一起,即如果您在一个表中有 M 行,在另一个表中有 N 行,那么您的结果将有 (M * N) 行。跨度>
  • 你的意思是我应该使用: For i As Integer = 0 To DataTables.Rows.Count?好的,我现在就试试。谢谢:D

标签: asp.net vb.net datatable


【解决方案1】:

我只是按照@jmcilhinney 告诉我的去做(即替换嵌套的Foreach 嵌套循环。这是我的新代码(幸运的是,它按预期的输出要求工作)

 Try
        Dim y As Integer = System.IO.Directory.GetFiles(BackUpDirectory).Length
        Dim row1 As DataRow
        Dim i As Integer = 0

        While i < y

            row1 = dtSF.Rows(i)

            Dim filenames As String() = System.IO.Directory.GetFiles(BackUpDirectory)
            Dim filename As String = filenames(i)


            multiply_SF = row1(0)
            CurveFitTatble = New DataTable()

            Dim TS_Name As String = "TmeStamp" + "_" & i
            Dim AD_Name As String = "AdjustedDemand" + "_" & i

            If i = 0 Then
                adjusteddemandtable.Columns.Add(TS_Name, GetType(Date))
                adjusteddemandtable.Columns(TS_Name).SetOrdinal(i)
                adjusteddemandtable.Columns.Add(AD_Name, GetType(Double))
                adjusteddemandtable.Columns(AD_Name).SetOrdinal(i + 1)

            ElseIf i > 0 Then

                adjusteddemandtable.Columns.Add(TS_Name, GetType(Date))
                adjusteddemandtable.Columns(TS_Name).SetOrdinal(i + 1)
                adjusteddemandtable.Columns.Add(AD_Name, GetType(Double))
                adjusteddemandtable.Columns(AD_Name).SetOrdinal(i + 2)
            End If

            'If row1(0) = filename Then
            CurveFitTatble = GetDataTabletFromCSVFile(filename)

            'For Each row As DataRow In CurveFitTatble.Rows()
            Dim row As DataRow
            For j As Integer = 0 To CurveFitTatble.Rows.Count - 1


                row = CurveFitTatble.Rows(j)
                initial_Demand = row(1)
                basecurvestamp = row(0)

                adjusted_Demand = multiply_SF * initial_Demand

                Dim rowa As DataRow = adjusteddemandtable.Rows.Add()

                If i = 0 Then
                    rowa(i) = basecurvestamp
                    rowa(i + 1) = adjusted_Demand

                ElseIf i > 0 Then

                    rowa(i + 1) = basecurvestamp
                    rowa(i + 2) = adjusted_Demand

                End If
            Next

            i = i + 1

        End While

    Catch ex As Exception
        ErrorMessageBox(ex.Message)
    End Try

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2021-10-21
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多