DataGrid分页报错!
AllowCustomPaging must be true and VirtualItemCount must be set for a DataGrid with ID DataGrid1 when AllowPaging is set to true and the selected datasource does not implement ICollection.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: AllowCustomPaging must be true and VirtualItemCount must be set for a DataGrid with ID DataGrid1 when AllowPaging is set to true and the selected datasource does not implement ICollection.
Source Error:
Line 47: Dim str As String = "Select * from fileinfo where 1=0"
Line 48: DataGrid1.DataSource = d.ExecuteReader(str)
Line 49: DataGrid1.DataBind()
Line 50: End Sub
问题点数:100、回复次数:11Top
1 楼hedonister(冰戈)回复于 2005-01-31 15:03:14 得分 2
datareader 不会实现Icollection 接口,换成dataview 吧Top
2 楼warren1999(warren1999)回复于 2005-01-31 15:04:32 得分 1
允许自定义分页没有选中Top
3 楼liulxmooo(娃娃)回复于 2005-01-31 15:06:11 得分 1
upTop
4 楼jackymi(完美刺客)回复于 2005-01-31 15:06:20 得分 0
同上Top
5 楼fanweiwei(黑暗凝聚力量,堕落方能自由)回复于 2005-01-31 15:06:38 得分 0
xuexiTop
6 楼hedonister(冰戈)回复于 2005-01-31 15:06:38 得分 1
把代码贴出来,帮你该Top
7 楼hedonister(冰戈)回复于 2005-01-31 15:07:37 得分 2
自定义分页没有选中了,也没法分页datareader 不会实现Icollection 接口Top
8 楼AllenTing(今天你GC了吗???)回复于 2005-01-31 15:09:02 得分 2
用dataview作为数据源,datareader是不行的Top
9 楼mooddecode1980(心情解码)回复于 2005-01-31 15:09:28 得分 0
up
-----Top
10 楼spland(spland)回复于 2005-01-31 15:09:43 得分 1
Dim dadpt As SqlDataAdapter = New SqlDataAdapter(selectcmd)
Dim dset As DataSet = New DataSet
dadpt.Fill(dset)
Line 48: DataGrid1.DataSource = dset
Line 49: DataGrid1.DataBind()
Top
11 楼goody9807(http://goody9807.cnblogs.com)回复于 2005-01-31 15:21:23 得分 90
DataGrid是Asp.NET中的一个重要的控件,经常我们都将DataGrid做成可分页的和可排序的,有时还需要加上选择功能。这些都是经常需要用到的方法,其实是比较简单的。
设计思路:
为了方便起见,我们连接SQL Server 2000的NorthWind数据库的Orders表,从数据库里得到此表的数据视图。利用DataGrid的SortCommand事件实现排序。用一个模板列加上CheckBox控件实现选择。可用DataGrid的属性生成器的“分页”选项或者自己修改HTML实现分页。
HTML:
l 添加一个DataGrid,命名为dgOrder。
l 添加了一个模板列,模板列里放一个名为Cb的CheckBox控件。此列用来实现选择
l 为要排序的每个列加上排序表达式SortExpression。
l 利用列的DataFormatString来格式化列,象DataFormatString="{0:d}"显示日期格式。
l 设置PageSize="15"每页显示15行数据,AllowPaging="True" 为允许分页 。
整个HTML页代码:
<form id="Form1" method="post" runat="server">
<asp:datagrid id="dgOrder" runat="server" Height="515px" Width="718px" AutoGenerateColumns="False" AllowSorting="True" CellPadding="4" BorderWidth="1px" BorderColor="#A0ABEB" PageSize="15" BorderStyle="Solid" BackColor="White" GridLines="Vertical" ForeColor="Black" AllowPaging="True" ShowFooter="True">
<SelectedItemStyle ForeColor="White" BackColor="Black"></SelectedItemStyle>
<AlternatingItemStyle BackColor="#EEEEEE"></AlternatingItemStyle>
<HeaderStyle HorizontalAlign="Center" ForeColor="White" BorderColor="#6876C5" BackColor="#6876C5"></HeaderStyle>
<FooterStyle ForeColor="White" BackColor="#6876C5"></FooterStyle>
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<FONT face="">
<asp:CheckBox id="Cb" runat="server"></asp:CheckBox></FONT>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="orderid" SortExpression="orderid" HeaderText="ID">
<HeaderStyle Width="180px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="ShipCountry" SortExpression="ShipCountry" HeaderText="ShipCountry">
<HeaderStyle Width="180px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="ShippedDate" SortExpression="ShippedDate" HeaderText="ShippedDate" DataFormatString="{0:d}">
<HeaderStyle Width="180px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="Freight" SortExpression="Freight" HeaderText="Freight">
<HeaderStyle Width="180px"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="ShipAddress" SortExpression="ShipAddress" HeaderText="ShipAddress">
<HeaderStyle Width="480px"></HeaderStyle>
</asp:BoundColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="Black" Position="TopAndBottom" BackColor="White" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
</form>
后台代码:
'得到数据视图,参数为要排序的列
Private Function GetDv(ByVal strSort As String) As DataView
'定义数据库连接
Dim dv As DataView
Dim CN As New SqlConnection()
Try
'初始化连接字符串
CN.ConnectionString = "data source=pmserver;
initial catalog=Northwind;persist security info=False;user id=sa;Password=sa;"
CN.Open()
'从NorthWind得到orders表的数据
Dim adp As SqlDataAdapter = New SqlDataAdapter("select * from orders", CN)
Dim ds As New DataSet()
adp.Fill(ds)
'得到数据视图
dv = ds.Tables(0).DefaultView
Catch ex As Exception
#If DEBUG Then
Session("Error") = ex.ToString()
Response.Redirect("../error.aspx") '跳转程序的公共错误处理页面
#End If
Finally
'关闭连接
CN.Close()
End Try
'排序
dv.Sort = strSort
Return dv
End Function
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
If Not IsPostBack Then
ViewState("strSort") = "orderid"
dgOrder.DataSource = GetDv(ViewState("strSort").ToString())
dgOrder.DataBind()
End If
End Sub
'排序
Private Sub dgOrder_SortCommand(ByVal source As Object,
ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles dgOrder.SortCommand
dgOrder.CurrentPageIndex = 0
'得到排序的列
ViewState("strSort") = e.SortExpression.ToString()
dgOrder.DataSource = GetDv(ViewState("strSort").ToString())
dgOrder.DataBind()
End Sub
'分页
Private Sub dgOrder_PageIndexChanged(ByVal source As Object,
ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles dgOrder.PageIndexChanged
'得到分页的页号
dgOrder.CurrentPageIndex = e.NewPageIndex
dgOrder.DataSource = GetDv(ViewState("strSort").ToString())
dgOrder.DataBind()
End Sub
Top




