将内部的 DataTable 更新为 DataSet

Updating DataTable inside as DataSet

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

对于一些更复杂的报告,我们刚刚设置了一个 Web 服务来 运行 它们和 return 一个 PDF...为了更容易,我想到将这些 DataTables 加载到一个 DataSet 中,然后然后在服务器端提取它们。这在第一次 运行 时完美运行,但随后(尽我所能)它为后续报告发送了不正确的(最后加载的)数据。在本地它仍然可以正常工作,但我们在数据集中发送的数据表似乎没有更新。已尝试删除表并再次重新添加它们,但在第一次从服务器的 DataTable 中选择 DataRow 时只会抛出 'object reference not set'。

一定是我一直缺少的非常基本的东西:-(

有什么想法吗?

谢谢

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

如果我们删除数据表并将其添加回数据集,则会在服务器端引发错误

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. 从数据集中删除数据表并再次添加它们(这让我们完成了部分工作)

  2. 再次命名数据表!

    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)
    

现在它似乎工作正常:-)