2016-12-06 86 views
0

在会计WPF应用程序中,我们有许多公用DataTable,可在打开选项卡后重新加载数据。这在本地很好,因为报告只是指这些表格。将数据表更新为数据集

对于一些更复杂的报告,我们刚刚设置了一个Web服务来运行它们并返回一个PDF ...为了使它更容易,我想加载这些DataTables转换成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 

在服务器端抛出一个错误,如果我们删除和添加的数据表背到数据集

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

回答

0

看起来像答案是

  1. 取下DataSet中的数据表,并再次添加它们(这得到了我们的存在方式的一部分)

  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) 
    

现在似乎:-)

正常工作