关于AspNetPager分页控件问题!

kent55782 2009-11-04 02:35:55
兄弟我最近刚开始使用AspNetPager分页控件,不了解之处还请多指教!
老规矩贴下代码:

--前台代码
<div>
<asp:DropDownList ID="ddlProductCategory1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlProductCategory1_SelectedIndexChanged">
</asp:DropDownList><br />
<asp:GridView ID="grvProductCategory" runat="server"
AutoGenerateColumns="False" OnRowDeleting="grvProductCategory_RowDeleting">
<Columns>
<asp:TemplateField HeaderText="产品类别">
<ItemTemplate>
<asp:Label ID="Label1" runat="server"><%#Eval("name")%></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" PageSize="10"
onpagechanging="AspNetPager1_PageChanging" AlwaysShow="True" FirstPageText="首页" LastPageText="尾页" NumericButtonTextFormatString="[{0}]" ShowInputBox="Never" CssClass="paginator" CurrentPageButtonClass="cpb" Font-Size="12px" NextPageText="下一页" PrevPageText="上一页" ShowBoxThreshold="11" TextAfterInputBox="" TextBeforeInputBox="" UrlPaging="true" >
</webdiyer:AspNetPager>

--后台代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDdlProductCategory1();
BindGridView(1, Convert.ToInt32(ddlProductCategory1.SelectedValue));
}
}

private void BindDdlProductCategory1()
{
SqlConnection cn = Connection.ConnectionObject;
SqlCommand cmd = Connection.CommandObject;
cmd.CommandText = "select id,name from ProductCategory1";
cmd.Connection = cn;
cn.Open();
ddlProductCategory1.DataSource = cmd.ExecuteReader();
ddlProductCategory1.DataTextField = "name";
ddlProductCategory1.DataValueField = "id";
ddlProductCategory1.DataBind();
cn.Close();

}
protected void ddlProductCategory1_SelectedIndexChanged(object sender, EventArgs e)
{
BindGridView(1, Convert.ToInt32(ddlProductCategory1.SelectedValue));
}

private void BindGridView(int index,int category)
{
SqlConnection cn = Connection.ConnectionObject;
SqlCommand cmd = Connection.CommandObject;
cmd.CommandText = "select TOP 10 id,name,did from ProductCategory2 where id NOT IN (SELECT TOP " + 10 * (index - 1) + " id FROM ProductCategory2 ORDER BY id) and did=@did order by id ";
cmd.Parameters.AddWithValue("@did",category);
cmd.Connection = cn;
cn.Open();
grvProductCategory.DataSource = cmd.ExecuteReader();
grvProductCategory.DataKeyNames = new string[] { "id" };
grvProductCategory.DataBind();
cn.Close();
cmd.Parameters.Clear();

cmd.CommandText = "select count(id) from ProductCategory2 where did=@id";
cmd.Parameters.AddWithValue("@id", category);
cn.Open();

object o = cmd.ExecuteScalar();
if (o != DBNull.Value)
{
AspNetPager1.RecordCount = Convert.ToInt32(o);
}
cn.Close();

}

protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
{
BindGridView(e.NewPageIndex, Convert.ToInt32(ddlProductCategory1.SelectedValue));
}

现在问题如下:
我通过页面上的那个dropdownlist选择后,分别绑定的是不同类别的数据!
假设:目前ddlProductCategory1控件就绑定了类别A和B(默认初始页面的时候也是显示A类别的数据)
当我选择到A类别的时候,分页控件一切正常。
但是当我把A类别切换到B类别的时候,Gridview进行了一次重新的数据绑定!
OK,这个时候也如程序编写,正常显示了B类别的前10条数据。但是当我点选分页控件的时候,索引的按扭就
失去了效果,无法正常起到翻页的效果,不管怎么点,都还只是B类别数据的最前10条。
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kent55782 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yanzhiyong 的回复:]
C# code cmd.CommandText="select TOP 10 id,name,did from ProductCategory2 where id NOT IN (SELECT TOP"+10* (index-1)+" id FROM ProductCategory2 ORDER BY id) and did=@did order by id";///

就是这句话写得有点问题。。。分页的前后条件应该一样吧。。
cmd.CommandText="select TOP 10 id,name,did from ProductCategory2 where id NOT IN (SELECT TOP"+10* (index-1)+" id FROM ProductCategory2 where did=@did ORDER BY id) and did=@did order by id";
就这样子试下看。。

[/Quote]

我刚居然没仔细看这句,自己还找了半天,才解决!没想到回过头来一看,确实已经给出了问题所在!分数结了!
kent55782 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 webdiyer 的回复:]
应该是你使用了url分页方式导致的,url分页时每次都打开新页面,丢失了原来页面的ViewData,这就导致你的产品类别下拉框又恢复为页面第一次加载时的状态(也就是选中项不是你分页前选中的项了),你试试去掉urlPage="true"而使用默认的PostBack分页方式看是否还有问题。
[/Quote]

昨天后来忘记写了 urlPage="true" 这句我已经拿掉了,不然每次回传页面后,都会回到第一个类别!
lovexilove 2009-11-04
  • 打赏
  • 举报
回复
去研究人家用aspnetpager的源码的部分好了 用viewstate
dengchenlu 2009-11-04
  • 打赏
  • 举报
回复
你可以把你的下拉获取的值存在一个地方
ViewState 之类
然后绑定的时候获取ViewState里面的值
这样就不会有问题了
yanzhiyong 2009-11-04
  • 打赏
  • 举报
回复
 SqlConnection cn = Connection.ConnectionObject; 
SqlCommand cmd = Connection.CommandObject;
cmd.CommandText = "select TOP 10 id,name,did from ProductCategory2 where id NOT IN (SELECT TOP " + 10 * (index - 1) + " id FROM ProductCategory2 ORDER BY id) and did=@did order by id ";
cmd.Parameters.AddWithValue("@did",category);
cmd.Connection = cn;
cn.Open();
grvProductCategory.DataSource = cmd.ExecuteReader();
grvProductCategory.DataKeyNames = new string[] { "id" };
grvProductCategory.DataBind();
cn.Close();
cmd.Parameters.Clear();


///
///就是这句话写得有点问题。。。

///分页的前后条件应该一样吧。。
cmd.CommandText = "select TOP 10 id,name,did from ProductCategory2 where did=@did and id NOT IN (SELECT TOP " + 10 * (index - 1) + " id FROM ProductCategory2 where did=@did ORDER BY id) order by id ";

就这样子试下看。。





yanzhiyong 2009-11-04
  • 打赏
  • 举报
回复
 cmd.CommandText = "select TOP 10 id,name,did from ProductCategory2 where id NOT IN (SELECT TOP " + 10 * (index - 1) + " id FROM ProductCategory2 ORDER BY id) and did=@did order by id  "; 

///


就是这句话写得有点问题。。。分页的前后条件应该一样吧。。
cmd.CommandText = "select TOP 10 id,name,did from ProductCategory2 where id NOT IN (SELECT TOP " + 10 * (index - 1) + " id FROM ProductCategory2 where did=@did ORDER BY id) and did=@did order by id ";
就这样子试下看。。

gongsun 2009-11-04
  • 打赏
  • 举报
回复
...
Vedy 2009-11-04
  • 打赏
  • 举报
回复
mark
webdiyer 2009-11-04
  • 打赏
  • 举报
回复
应该是你使用了url分页方式导致的,url分页时每次都打开新页面,丢失了原来页面的ViewData,这就导致你的产品类别下拉框又恢复为页面第一次加载时的状态(也就是选中项不是你分页前选中的项了),你试试去掉urlPage="true"而使用默认的PostBack分页方式看是否还有问题。
kent55782 2009-11-04
  • 打赏
  • 举报
回复
这里有写了呀
private void BindDdlProductCategory1()
{
SqlConnection cn = Connection.ConnectionObject;
SqlCommand cmd = Connection.CommandObject;
cmd.CommandText = "select id,name from ProductCategory1";
cmd.Connection = cn;
cn.Open();
ddlProductCategory1.DataSource = cmd.ExecuteReader();
ddlProductCategory1.DataTextField = "name";
ddlProductCategory1.DataValueField = "id";
ddlProductCategory1.DataBind();
cn.Close();

}
protected void ddlProductCategory1_SelectedIndexChanged(object sender, EventArgs e)
{
BindGridView(1, Convert.ToInt32(ddlProductCategory1.SelectedValue));
}
ll6855668 2009-11-04
  • 打赏
  • 举报
回复
dropdownlist 应该写段后台代码的

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧