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?
我正在尝试将数据集用于报告,但是当我尝试使用它时数据消失了。这是我的大部分代码:
变量:
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?