GridView启用分页后绑定ObjectDataSource(ObjectDataSource也启用了)数据查不出、但对象中方法的确被调用,而且有数据(断点看了),ObjectDataSource禁用分页可以查出数据(我定义了非分页版的方法)。问题就是不能启用ObjectDataSource分页,SelectCountMethod之类的方法我是都指定了的。
上代码:
<asp:GridView CssClass="grid" ID="gvScreen" AllowPaging="true" PageSize="20"
GridLines="None" AutoGenerateColumns="false"
DataSourceID="srcBBS" runat="server" ondatabinding="gvScreen_DataBinding"
ondatabound="gvScreen_DataBound" >
<Columns>
<asp:TemplateField HeaderText="发布者">
<ItemTemplate>
<span class="user">
<%#Eval("Name") %></span><br />
<span class="ipaddress">
<%#HideIpAddress(Convert.ToString(Eval("IpAddress")))%></span>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="发布时间">
<ItemTemplate>
<span class="time">
<%#Eval("Time") %></span></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="发布内容">
<ItemTemplate>
<div class="content">
<%#Eval("Body") %></div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
没有留言。</EmptyDataTemplate>
</asp:GridView>
<asp:ObjectDataSource ID="srcBBS" EnablePaging="true" TypeName="BLL.BBSLogic"
InsertMethod="Insert" SelectCountMethod="GetCount" SelectMethod="GetPosts"
runat="server" DataObjectTypeName="Model.Post"
OnInserting="srcBBS_Inserting">
</asp:ObjectDataSource>
public static class BBSLogic
{
static IBBSDataAccess bbsDA = new BBSSqlDataAccess();
public static List<Post> GetPosts()
{
return bbsDA.GetPosts();
}
public static List<Post> GetPosts(long maximumRows, long startRowIndex)
{
return bbsDA.GetPosts(maximumRows,startRowIndex);
}
public static bool Insert(Post post)
{
ValidationPost(post);
return bbsDA.Insert(post);
}
public static long GetCount()
{
return bbsDA.GetCount();
}
public static void ValidationPost(Post post)
{
if (post.Body.Length > 300 || post.Body.Length <= 0)
throw new ArgumentException("Body属性长度应该大于0小于300");
if (post.IpAddress.Length > 50)
throw new ArgumentException("IpAddress长度不能超过50");
if (post.Name.Length > 50)
throw new ArgumentException("Name长度不能大于50");
}
}
我自己调试的时候断点了GridView的DataBanding和DataBound处理函数
结果发现在这两个函数里GridView的Row.Count都是0,而且用ObjectDataSource的Select方法查不到数据(我添加监视中查不到,但代码的确执行过、而却有返回的内容)。
我把ObjectDataSource的EnabledPaging设为false调用非分页版的方法发现在DataBound中ROW.COUNT是产生变化的
然后我启用ObjectDataSource的分页,然后在分页方法中直接调用非分页的方法,结果这两个函数中Row.Count没有变化,但是在监视里ObjectDataSource的Select可以查到数据。
总之就是只要启用ObjectDataSource的分页GridView就是空,求解决办法
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
InitPage(); //重新绑定GridView数据的函数
}
你添加上面的分页事件试试。
是因为我的SelectCountMethod返回是long.返回int即可