如何制作 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