VB.NET数据集table数据为空

VB.NET DataSet table data empty

我正在尝试将数据集用于报告,但是当我尝试使用它时数据消失了。这是我的大部分代码:

变量:

Dim ResultsDataView As DataView
Dim ResultsDataSet As New DataSet
Dim ResultsTable As New DataTable
Dim SQLQuery As String

搜索: 这是在主视图中填充数据网格的地方。数据显示完美。

Private Sub Search(Optional ByVal Bind As Boolean = True, Optional ByVal SearchType As String = "", Optional ByVal SearchButton As String = "")
        Dim SQLQuery As String
        Dim ResultsDataSet
        Dim LabelText As String
        Dim MultiBudgetCenter As Integer = 0

        SQLQuery = "A long and detailed SQL query that grabs N rows with 7 columns"
        ResultsDataSet = RunQuery(SQLQuery)
        ResultsTable = ResultsDataSet.Tables(0)

        For Each row As DataRow In ResultsTable.Rows
            For Each item In row.ItemArray
                sb.Append(item.ToString + ","c)
                Response.Write(item.ToString + "\n")
                Response.Write(vbNewLine)
            Next
            sb.Append(vbCr & vbLf)
        Next
        'Response.End()

        If Bind Then
            BindData(ResultsDataSet)
        End If

    End Sub

绑定数据: 我认为这是问题的一个原因。

Private Sub BindData(ByVal InputDataSet As DataSet)
        ResultsDataView = InputDataSet.Tables("Results").DefaultView

        ResultsDataView.Sort = ViewState("SortExpression").ToString()

        ResultsGridView.DataSource = ResultsDataView

        ResultsGridView.DataBind()
End Sub

报告行动: 这是我尝试使用 table 数据的地方。但是它什么都没有显示。

Protected Sub ReportButton_Click(sender As Object, e As EventArgs) Handles ReportButton.Click
        For Each row As DataRow In ResultsTable.Rows
            For Each item In row.ItemArray
                Response.Write(item.ToString)
            Next
        Next
    End Sub

我尝试遍历此数据的原因是既要在主视图的网格视图中显示数据,又要将数据导出到 CSV。如果有其他方法可以将 SQL 查询导出为 CSV,我愿意接受任何建议。

我必须做一些事情才能从 SQL 查询中获取数据以通过 ReportButton_Click 方法保留。我试过复制数据table,我试过全局变量,我试过不同的循环遍历数据集的方法。我错过了什么?!

提前谢谢大家。

编辑 这是 Page_Load:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Page.IsPostBack Then
            'set focus to postback control
            Dim x As String = GetPostBackControlName(Page)

            If Len(x) > 0 Then
                x = x.Replace("$", "_")
                SetFocus(x)
            End If
        End If

        If Not IsPostBack Then
            ResultsGridView.AllowPaging = False

            'Enable Gridview sorting
            ResultsGridView.AllowSorting = True

            'Initialize the sorting expression
            ViewState("SortExpression") = "ID DESC"

            'Populate the Gridview
            Search()
        End If
    End Sub

在您的搜索功能中,在 ResultsTable 设置之后添加这一行

    ResultsTable = ResultsDataSet.Tables(0)
    Session("LastSearch") = ResultsTable

然后在您的报告中单击事件处理程序从 Session 变量中恢复您的数据

Protected Sub ReportButton_Click(sender As Object, e As EventArgs) Handles ReportButton.Click
    ResultsTable = DirectCast(Session("LastSearch"), DataTable)
    For Each row As DataRow In ResultsTable.Rows
        For Each item In row.ItemArray
            Response.Write(item.ToString)
        Next
    Next
End Sub

您需要阅读 ASP.NET Life Cycle 并了解每次 ASP.NET 调用您的方法时都会创建一个新的页面实例 class。当然这意味着 ASP.NET 中的全局页面变量不是很有用。
还要考虑阅读有关该 Session 对象的信息,不要滥用它。

What is the difference between SessionState and ViewState?