将DataTable作为DataSet更新

时间:2016-12-06 18:53:45

标签: datatable dataset

在会计WPF应用程序中,我们有许多公共DataTable,它们在打开选项卡后重新加载数据。这在本地很有用,因为报告只是引用那些表..

对于一些更复杂的报告,我们刚刚设置了一个Web服务来运行它们并返回一个PDF ...为了更容易,我想到将这些DataTable加载到DataSet中然后在服务器端提取它们。这在第一次运行时非常有效,但是(到目前为止我可以解决)它会为后续报告发送不正确的(最后加载的)数据。在本地它仍然可以正常工作,但我们在DataSet中发送的DataTable似乎没有更新。尝试删除表并再次重新添加它们,但这只是在第一次从服务器上的DataTable中选择DataRow时抛出“未设置对象引用”。

必须是我一直缺少的基本内容: - (

有什么想法吗?

由于

Private Async Sub RunProfitAndLossOnServer(sender As Object, e As RoutedEventArgs)
    Try
        Dim StartDateTB As DateTBx = ReportBalanceSheet_Grid.FindName("BalanceSheet_StartDateTB")
        Dim EndDateTB As DateTBx = ReportBalanceSheet_Grid.FindName("BalanceSheet_EndDateTB")

        ReportStartDate = StartDateTB.Value
        ReportEndDate = EndDateTB.Value
        ReportDate = Today
        ReportName = "Profit and Loss Report"
        PaperLandscape = False
        ReportFontSize = 8
        PopupModals_ReportGenerator()
        If ReportGeneratorRun = True Then

            Dim vPDF() As Byte = Nothing
            'Determine if the Export Dataset has already been created
            If ExportDS Is Nothing Then
                ExportDS = New DataSet
                VariablesDT = New DataTable
                With VariablesDT.Columns
                    .Add("Current_HOA_Name", GetType(String))
                    .Add("Current_HOA_ID", GetType(Integer))
                    .Add("ReportName", GetType(String))
                    .Add("ReportFontSize", GetType(Integer))
                    .Add("ReportStartDate", GetType(Date))
                    .Add("ReportEndDate", GetType(Date))
                    .Add("User_InternationalDate", GetType(Integer))
                    .Add("PaperSize", GetType(String))
                    .Add("PaperLandscape", GetType(Boolean))
                    .Add("Reports_IsSplitGL", GetType(Boolean))
                    .Add("Form_ID", GetType(Integer))
                End With
                With VariablesDT.Rows
                    .Add(Current_HOA_Name, Current_HOA_ID, ReportName, ReportFontSize, ReportStartDate, ReportEndDate, User_InternationalDate, PaperSize, PaperLandscape, False, Form_ID)
                End With
                VariablesDT.TableName = "VariablesDT"
                ExportDS.Tables.Add(VariablesDT)
                ResIncomeDT.TableName = "ResIncomeDT"
                ExportDS.Tables.Add(ResIncomeDT)
                ResIncNomDT.TableName = "ResIncNomDT"
                ExportDS.Tables.Add(ResIncNomDT)
                ResExpensesDT.TableName = "ResExpensesDT"
                ExportDS.Tables.Add(ResExpensesDT)
                ResExpNomDT.TableName = "ResExpNomDT"
                ExportDS.Tables.Add(ResExpNomDT)
                RevenueDT.TableName = "RevenueDT"
                ExportDS.Tables.Add(RevenueDT)
                ExpensesDT.TableName = "ExpensesDT"
                ExportDS.Tables.Add(ExpensesDT)
                RevenueNomDT.TableName = "RevenueNomDT"
                ExportDS.Tables.Add(RevenueNomDT)
                ExpensesNomDT.TableName = "ExpensesNomDT"
                ExportDS.Tables.Add(ExpensesNomDT)
            Else

                ExportDS.Tables.Remove("ResIncomeDT")
                ExportDS.Tables.Remove("ResIncNomDT")
                ExportDS.Tables.Remove("ResExpensesDT")
                ExportDS.Tables.Remove("ResExpNomDT")
                ExportDS.Tables.Remove("RevenueDT")
                ExportDS.Tables.Remove("ExpensesDT")
                ExportDS.Tables.Remove("RevenueNomDT")
                ExportDS.Tables.Remove("ExpensesNomDT")

                ExportDS.Tables.Add(ResIncomeDT)
                ExportDS.Tables.Add(ResIncNomDT)
                ExportDS.Tables.Add(ResExpensesDT)
                ExportDS.Tables.Add(ResExpNomDT)
                ExportDS.Tables.Add(RevenueDT)
                ExportDS.Tables.Add(ExpensesDT)
                ExportDS.Tables.Add(RevenueNomDT)
                ExportDS.Tables.Add(ExpensesNomDT)

                ExportDS.Tables.Remove("VariablesDT")

                For Each row As DataRow In VariablesDT.Rows
                    row("Current_HOA_Name") = Current_HOA_Name
                    row("current_HOA_ID") = Current_HOA_ID
                    row("ReportFontSize") = ReportFontSize
                    row("User_InternationalDate") = User_InternationalDate
                    row("PaperSize") = PaperSize
                    row("PaperLandscape") = PaperLandscape
                    row("Reports_IsSplitGL") = False
                    row("ReportStartDate") = ReportStartDate
                    row("ReportEndDate") = ReportEndDate
                    row("ReportName") = ReportName
                    row("Form_ID") = Form_ID
                Next


                ExportDS.Tables.Add(VariablesDT)

            End If

            Dim vImage As New LoadingImage
                LoadingStarted("Uploading to xSoftware... Please wait...", vImage)
                Await Task.Run(Sub()
                                   Using vService As New Service5Client
                                       vPDF = vService.ReturnProfitAndLossSheet(ExportDS)
                                   End Using
                               End Sub)

                LoadingCompleted("File uploaded to xSoftware...", "File was uploaded and PDF returned...", vImage)

                Dim vFile As String = ByteToFilePath(vPDF)
                If System.IO.File.Exists(vFile) Then
                    Dim P As New Process
                    With P
                        .StartInfo.FileName = vFile
                        .StartInfo.Verb = "Open"
                        .Start()
                    End With
                Else
                    AppBoxError("The file path for the PDF is not valid!")
                End If


            End If
    Catch ex As Exception
        EmailError(ex)
    End Try
End Sub

如果我们删除数据表并将数据表添加回DataSet

,则会在服务器端引发错误
Dim RevenueData() As DataRow = RevenueDT.Select("FormID = " & Form_ID, "Position")
        Dim ExpenseData() As DataRow = ExpensesDT.Select("FormID = " & Form_ID, "Position")
        Dim RevenueNomData() As DataRow = RevenueNomDT.Select("FormID = " & Form_ID, "Position")
        Dim ExpenseNomData() As DataRow = ExpensesNomDT.Select("FormID = " & Form_ID, "Position")

1 个答案:

答案 0 :(得分:0)

看起来答案是

  1. 从DataSet中删除DataTable并再次添加(这使我们成为其中的一部分)

  2. 再次命名DataTables!

    ExportDS.Tables.Remove("ResIncomeDT")
                ExportDS.Tables.Remove("ResIncNomDT")
                ExportDS.Tables.Remove("ResExpensesDT")
                ExportDS.Tables.Remove("ResExpNomDT")
                ExportDS.Tables.Remove("RevenueDT")
                ExportDS.Tables.Remove("ExpensesDT")
                ExportDS.Tables.Remove("RevenueNomDT")
                ExportDS.Tables.Remove("ExpensesNomDT")
                ExportDS.Tables.Remove("VariablesDT")   
    
    
     VariablesDT.TableName = "VariablesDT"
                ExportDS.Tables.Add(VariablesDT)
                ResIncomeDT.TableName = "ResIncomeDT"
                ExportDS.Tables.Add(ResIncomeDT)
                ResIncNomDT.TableName = "ResIncNomDT"
                ExportDS.Tables.Add(ResIncNomDT)
                ResExpensesDT.TableName = "ResExpensesDT"
                ExportDS.Tables.Add(ResExpensesDT)
                ResExpNomDT.TableName = "ResExpNomDT"
                ExportDS.Tables.Add(ResExpNomDT)
                RevenueDT.TableName = "RevenueDT"
                ExportDS.Tables.Add(RevenueDT)
                ExpensesDT.TableName = "ExpensesDT"
                ExportDS.Tables.Add(ExpensesDT)
                RevenueNomDT.TableName = "RevenueNomDT"
                ExportDS.Tables.Add(RevenueNomDT)
                ExpensesNomDT.TableName = "ExpensesNomDT"
                ExportDS.Tables.Add(ExpensesNomDT)
    
  3. 现在它似乎正常工作: - )