Данные таблицы VB.NET DataSet пустые - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь использовать набор данных для отчета, но данные исчезают, когда я пытаюсь его использовать.Вот мой код по большей части:

Переменные:

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

Действие по отчетности: здесь я пытаюсь использовать таблицуданные.Но он отображается как ничто.

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 метод.Я пытался скопировать данные, я пробовал глобальные переменные, я пробовал разные методы циклического прохождения набора данных.Чего мне не хватает?!

Спасибо всем заранее.

РЕДАКТИРОВАТЬ Вот 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

1 Ответ

0 голосов
/ 24 августа 2018

В вашей функции поиска добавьте эту строку после настройки 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 и понять, что каждый раз, когда ASP.NET вызывает ваши методы, он создает новый экземпляр вашего класса Page. Конечно, это означает, что глобальные переменные страницы в ASP.NET не очень полезны.
Также постарайтесь прочитать об этом объекте Session и не злоупотреблять им.

В чем разница между SessionState и ViewState?

...