vb.net - VB.NET DataSet 表数据为空
问题描述
我正在尝试将数据集用于报告,但是当我尝试使用它时数据消失了。这是我的大部分代码:
变量:
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
解决方案
在您的搜索功能中,在 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 对象的信息,不要滥用它。
推荐阅读
- javascript - 如何使用 Puppeteer 点击 PDF 页面上的下载按钮?
- sql-server - 如何使用 tSQLt 测试整数值是否在特定范围内?
- r - 将 2 级预测变量变为回归模型的是和否
- java - Redhat 8.4 Java Swing web -- 组件不可见,但确实存在
- python - Django 中 .get_or_create 函数的响应不正确
- c++ - 缺少magick-baseconfig.h
- function - 表达式与函数之间的差异
- c# - 当我在 Asp .net mvc 6.0 上搭建 Identity 时出现引导问题
- angular - 为什么我在 nx monorepo 中用于生产的 NestJS 构建版本不包含数据库?
- python - 无限递归:为什么会出现在这个类方法的实现中