数据源不支持服务器端分页

时间:2014-06-30 08:32:53

标签: asp.net vb.net visual-studio devexpress

我正在处理有数十万条来自数据库的记录的项目。我必须在DevExpress网格中显示它。 网格的默认行为是一次加载所有记录,它在客户端应用分页。 我遇到的问题是页面加载时需要很多时间。为了阻止这种情况,我将在devExpress网格上使用服务器端分页。但我收到错误:" The data source does not support server-side data paging"

我的网格是" gvList"我将其财产设置为:

gvList.DataSourceForceStandardPaging = True

然后

Dim cmd As New SqlCommand
Dim ds As New DataSet
Dim da As SqlDataAdapter
Dim dbConn As New SqlConnection(conStr)
cmd.CommandType = CommandType.Text
cmd.CommandText = strSQL     'contains SQL string
cmd.Connection = dbConn      'contains connection object
da = New SqlDataAdapter(cmd)
da.Fill(ds, tbl)
gvList.DataSource = ds
gvList.DataBind()

任何人都可以告诉我哪里出错了吗?

谢谢.. Anjum Dhamial

2 个答案:

答案 0 :(得分:0)

ASPxGridView支持三种不同的数据绑定模式:

1)将所有数据提取到Web服务器并由ASPxGridView本身处理时的通用绑定; 2)服务器端排序和分页。通过激活ASPxGridView的DataSourceForceStandardPaging属性打开此功能;在这种情况下,您需要使用ObjectDataSource,因为SQLDataSource不支持服务器端分页。 3)在DB服务器上实现几乎与网格数据相关的计算(如分组,摘要)时的真实服务器模式。上面的链接包含有关此模式的一些有用信息。

因此,解决此问题的最简单方法是使用我的第二个选项。第三种选择更强大,但还需要一些额外的工作。

答案 1 :(得分:0)

使用Custom Pagination aproach。

因此,您应该将网格关联到数据源。它可以是objectdatasource或另一个。 在数据源中,一些参数应该发送到包含选择和计数方法的类。

一个例子:

网络表单

<asp:ObjectDataSource ID="ds"
    EnablePaging="True"
    TypeName="Namespace.to.Service"
    runat="server"
    SelectMethod="FindAll"
    SelectCountMethod="FindAllCount"
    StartRowIndexParameterName="startRow">
    <SelectParameters>
        <asp:Parameter Name="maximumRows" Type="Int32" />
        <asp:Parameter Name="startRow" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

<asp:GridView  ID="grd" runat="server" AutoGenerateColumns="False" 
    DataSourceID="ds"
    AllowPaging="True">
<%--  add columns here --%>
</asp:GridView>

如果您需要通过某个控件在datasource中传递额外参数,可以添加到SelectParameters

<asp:ControlParameter ControlID="txtID" Name="parameterName" PropertyName="Text" Type="String" />

Namespace.to.Service类中,输入如下方法:

public IList<MyObject> FindAll(int maximumRows, int startRow) { ... }
public int FindAllCount(int maximumRows, int startRow) { ... }

如果使用了数据源中的额外参数,只需将它们添加到方法中:

public IList<MyObject> FindAll(int maximumRows, int startRow, string parameterName) 
{ 
   /*
      fetch result from database or something;
      'maximumRows' is pageSize
      'startRow' is first result to fetch 'maximumRows' records from database
   */ 
}
public int FindAllCount(int maximumRows, int startRow, string parameterName)
{
   /* 
     take amount of data for. It will be used to create grid footer for pagination;
     parameters are like above.
   */
}

我想这就是你所需要的一切。