我正在处理有数十万条来自数据库的记录的项目。我必须在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
答案 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.
*/
}
我想这就是你所需要的一切。