如何制作 Web 网格页面并使用视图状态而不是重新 运行 查询
How to make a web grid page and use viewstate instead of re-running the query
我有一个 Web 网格,选择你最喜欢的,因为我真的不认为它会改变这个问题的答案 - Microsoft、Telerik、Dev Express - 我已将其设置为使用分页。
我正在使用 Telerik,但我没有将其放入标签中,因为我认为问题不在于网格本身,我认为在于我如何定位数据绑定代码。
我有一个继承自 WebConrol
的 class,当我对网格进行分页时,此代码再次运行,重新绑定网格。我的问题是多次不必要地访问数据库(并等待)。
我会回答~任何~类型的网络数据网格。我想我可以根据需要将其翻译成我的网格类型。
Imports System.Data
Imports System.Web.UI.WebControls
Imports Telerik.Web.UI
Imports System.Web.UI
Imports System.Drawing
<ToolboxData("<{0}:ReportGrid runat=server></{0}:ReportGrid>")> _
<ToolboxBitmap(GetType(ReportGrid), "MyCompany.Web.UI.WebControls.ReportGrid.bmp")> _
Public Class ReportGrid
Inherits CompositeControl
Private _Grid As RadGrid
Private ReadOnly Property Grid As RadGrid
Get
If _Grid Is Nothing Then
_Grid = New RadGrid
_Grid.ClientSettings.Scrolling.UseStaticHeaders = True
'_Grid.Skin = "Black"
_Grid.AllowFilteringByColumn = True
_Grid.EnableAjaxSkinRendering = True
_Grid.AllowPaging = True
_Grid.AllowSorting = True
_Grid.ViewStateMode = System.Web.UI.ViewStateMode.Enabled
_Grid.GridLines = GridLines.Both
End If
Return _Grid
End Get
End Property
Protected Overrides Sub CreateChildControls()
Controls.Add(Grid)
'If Not Page.IsPostBack Then
'This code runs on every page load
Dim DataTable As DataTable = MyCompany.Library.Database.GetDataTable("My Connection String", "My Query")
Grid.DataSource = DataTable
Grid.DataBind()
'End If
End Sub
End Class
作为 Telerik 用户,我建议使用 RadGrid 的 OnNeedDataSource 来处理分页数据。有关其工作原理的更多信息,请点击此处:
http://demos.telerik.com/aspnet-ajax/grid/examples/data-binding/simple-vs-advanced/defaultcs.aspx
如果您有数十万或数百万条记录要显示在您的网格中,您需要考虑使用自定义分页解决方案 - 即只从数据源中拉回需要在该网格上显示的记录当前网格页面,而不是每次发生回发时都拉入所有记录。
查看此示例,了解如何在 Telerik RadGrid 中实现自定义分页:
http://demos.telerik.com/aspnet-ajax/grid/examples/functionality/paging/custom-paging/defaultcs.aspx
我有一个 Web 网格,选择你最喜欢的,因为我真的不认为它会改变这个问题的答案 - Microsoft、Telerik、Dev Express - 我已将其设置为使用分页。
我正在使用 Telerik,但我没有将其放入标签中,因为我认为问题不在于网格本身,我认为在于我如何定位数据绑定代码。
我有一个继承自 WebConrol
的 class,当我对网格进行分页时,此代码再次运行,重新绑定网格。我的问题是多次不必要地访问数据库(并等待)。
我会回答~任何~类型的网络数据网格。我想我可以根据需要将其翻译成我的网格类型。
Imports System.Data
Imports System.Web.UI.WebControls
Imports Telerik.Web.UI
Imports System.Web.UI
Imports System.Drawing
<ToolboxData("<{0}:ReportGrid runat=server></{0}:ReportGrid>")> _
<ToolboxBitmap(GetType(ReportGrid), "MyCompany.Web.UI.WebControls.ReportGrid.bmp")> _
Public Class ReportGrid
Inherits CompositeControl
Private _Grid As RadGrid
Private ReadOnly Property Grid As RadGrid
Get
If _Grid Is Nothing Then
_Grid = New RadGrid
_Grid.ClientSettings.Scrolling.UseStaticHeaders = True
'_Grid.Skin = "Black"
_Grid.AllowFilteringByColumn = True
_Grid.EnableAjaxSkinRendering = True
_Grid.AllowPaging = True
_Grid.AllowSorting = True
_Grid.ViewStateMode = System.Web.UI.ViewStateMode.Enabled
_Grid.GridLines = GridLines.Both
End If
Return _Grid
End Get
End Property
Protected Overrides Sub CreateChildControls()
Controls.Add(Grid)
'If Not Page.IsPostBack Then
'This code runs on every page load
Dim DataTable As DataTable = MyCompany.Library.Database.GetDataTable("My Connection String", "My Query")
Grid.DataSource = DataTable
Grid.DataBind()
'End If
End Sub
End Class
作为 Telerik 用户,我建议使用 RadGrid 的 OnNeedDataSource 来处理分页数据。有关其工作原理的更多信息,请点击此处:
http://demos.telerik.com/aspnet-ajax/grid/examples/data-binding/simple-vs-advanced/defaultcs.aspx
如果您有数十万或数百万条记录要显示在您的网格中,您需要考虑使用自定义分页解决方案 - 即只从数据源中拉回需要在该网格上显示的记录当前网格页面,而不是每次发生回发时都拉入所有记录。
查看此示例,了解如何在 Telerik RadGrid 中实现自定义分页:
http://demos.telerik.com/aspnet-ajax/grid/examples/functionality/paging/custom-paging/defaultcs.aspx