【问题标题】:Updating DataTable inside as DataSet将内部的 DataTable 更新为 DataSet
【发布时间】:2017-04-21 12:39:37
【问题描述】:

在会计 WPF 应用程序中,我们有许多公共 DataTables,一旦打开选项卡就会重新加载数据。这在本地很有效,因为报告只引用了这些表格。

对于一些更复杂的报告,我们刚刚设置了一个 Web 服务来运行它们并返回一个 PDF...为了更容易,我考虑将这些 DataTables 加载到 DataSet 中,然后在服务器端提取它们。这在第一次运行时完美运行,但随后(到目前为止,尽我所能)它正在为后续报告发送不正确的(最后加载的)数据。在本地它仍然可以正常工作,但是我们在 DataSet 中发送的 DataTables 似乎没有更新。已尝试删除表并重新添加它们,但这只会在第一次从服务器上的 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

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

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")

【问题讨论】:

    标签: datatable dataset


    【解决方案1】:

    答案好像是

    1. 从 DataSet 中删除 DataTables 并再次添加它们(这让我们成功了)

    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)
      

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

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多