如何在ASP.NET中的两个数据表之间进行迭代

时间:2014-05-30 02:22:42

标签: asp.net vb.net datatable

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

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

enter image description here

这是我的代码:

     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

我想,我错过了一些东西或忽略了一个重要的步骤。请指教。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我刚刚做了@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