如何将数据存储在内存中,并由其他按钮单击事件使用以显示数据



这是代码,但ButtonExport点击事件中的数据表为NULL,我如何将数据表传递给Sub ButtonExport_click?我不想存储在会话中,因为数据太大

这是类clsGlobalVarriable

Public Class clsGlobalVariable
Private _gdt As DataTable
Public Property globalDataTable As DataTable
Get
Return _gdt
End Get
Set(ByVal value As DataTable)
_gdt = value
End Set
End Property
End Class

这是From-frmTest代码:

Public Class frmTest
Inherits System.Web.UI.Page
Private gdt As New clsGlobalVariable
Protected Sub ButtonInactivePC_Click(sender As Object, e As EventArgs) Handles ButtonInactivePC.Click
Try
Dim func As New clsFunction
Dim command As String = "Get-ADComputer -Filter { OperatingSystem -NotLike '*Windows Server*'} -Property * | select Name, CanonicalName, operatingSystem, LastLogonDate, Description, whenChanged | Where {($_.LastLogonDate -lt (Get-Date).AddDays(-90)) -and ($_.LastLogonDate -ne $NULL)}"
Dim arr As New ArrayList
arr.Add("Name")
arr.Add("CanonicalName")
arr.Add("operatingSystem")
arr.Add("LastLogonDate")
arr.Add("whenChanged")
arr.Add("Description")
gdt.globalDataTable = func.PSObjectToDataTable(command, arr)
Me.GridView1.DataSource = gdt.globalDataTable
Me.GridView1.DataBind()
Catch ex As Exception
Me.LabelDebug.Text = "Button Click" + ex.Message
End Try

End Sub
Protected Sub ButtonExport_Click(sender As Object, e As EventArgs) Handles ButtonExport.Click
Dim func As New clsFunction
Dim dt As New DataTable
dt = (DirectCast(Me.GridView1.DataSource, DataTable))
Me.LabelDebug.Text = "Global Data Table Count = " & dt.Rows.Count
End Sub

当使用向用户显示数据的网页,并且用户对这些数据采取了一些操作时,您要么需要将数据存储在他们的计算机、您的计算机(服务器(中的某个位置,要么依赖于数据仍存储在您获取数据的计算机中的事实。作为您所承担的过程:

  • 通过查询AD生成网格
  • 您将网格发送到客户的计算机,因此它以视觉表示形式存储在那里(可能还有ViewState(
  • 它仍然存储在AD中,你在哪里得到的
  • 您也可以以某种方式将其本地存储在服务器上——会话、数据库、文本文件等等

决定当用户单击"导出:"时使用哪一个

  • 从发送给用户的视图状态或其他数据中挖掘它-为此,您必须对其进行编码,以便它从用户处返回
  • 再次将其从AD中删除-操作简单;您做过一次,并用HTML将其发送给用户。再次获取并以CSV的形式再次发送给用户与第一次发送没有什么不同
  • 从服务器上的任何位置恢复

如果您的用户要修改数据或选择只导出其中的一部分,请选择第一个-他发送回您的数据应指示他要导出的位。

如果你想要轻松的生活,选择第二个选项,它只是一个直接的导出,没有编辑或数据子集。编写一个从AD中获取数据的方法,然后在任意位置使用它,一个用于形成HTML/填充网格,另一个用于向用户发送文件。不要被"好吧,我已经得到了一次这些数据,再得到它是浪费"所困扰——没有人写登录页并认为"我只会从数据库中查找一次用户,然后让服务器永远记住登录数据,下次有登录请求时使用它"——他们将数据存储在数据库中,每次登录时都会查找。DB存储数据并反复执行相同的查询。这与没有什么不同

你可能不会选择第三个选项,原因已经提到

我决定使用Excel导出的替代方案,我不会传递DataTable,而是将GridView传递给导出到Excel函数

在Page_load之后添加以下子项,这是为了避免GridView错误

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
End Sub

这是代码:

Public Sub ExportFromGridview(ByVal gv As GridView, ByVal response As HttpResponse
response.Clear()
response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>")
response.AddHeader("content-disposition", "attachment;filename=" & Now & ".xls")
response.ContentType = "application/vnd.xls"
Dim stringWrite As System.IO.StringWriter = New System.IO.StringWriter()
Dim htmlWrite As System.Web.UI.HtmlTextWriter = New HtmlTextWriter(stringWrite)
gv.RenderControl(htmlWrite)
response.Write(stringWrite.ToString())
response.End()
End Sub

最新更新