DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
来源:互联网 发布:mac显卡和普通显卡 编辑:程序博客网 时间:2024/05/16 05:15
<%@ Page language="c#" Codebehind="DataListNews.aspx.cs" AutoEventWireup="false" Inherits="DataListNesting.DataListNews" %>
BODY { FONT-SIZE: 12px }
A:link { TEXT-DECORATION: none }
A:visited { TEXT-DECORATION: none }
CS代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace DataListNesting
{
///
/// DataListNews 的摘要说明。
///
public class DataListNews : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lbTotalPage;
protected System.Web.UI.WebControls.Label lbTotalCount;
protected System.Web.UI.WebControls.Label lbCurrentPage;
protected System.Web.UI.WebControls.DropDownList ddlPage;
protected System.Web.UI.WebControls.DataList dlParent;
protected System.Web.UI.WebControls.LinkButton FirstPage;
protected System.Web.UI.WebControls.LinkButton PreviousPage;
protected System.Web.UI.WebControls.LinkButton NextPage;
protected System.Web.UI.WebControls.LinkButton LastPage;
private Int32 CurrentPageNumber=1;
private int PageSize=5;
private string strConn="server=localhost;uid=sa;pwd=;database=AspNetTest";
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
BindData();
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.dlParent.ItemDataBound += new System.Web.UI.WebControls.DataListItemEventHandler(this.dlParent_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private DataSet BindParent(int PageSize,int CurrentPageNumber)
{
SqlConnection Conn=new SqlConnection(strConn);
SqlCommand Cmd=new SqlCommand();
Cmd.Connection=Conn;
Cmd.CommandType=CommandType.StoredProcedure;
Cmd.CommandText="BindNews";
SqlParameter pramsPageSize=new SqlParameter();
pramsPageSize.ParameterName="@PageSize";
pramsPageSize.Value=PageSize;
SqlParameter pramsCurrent=new SqlParameter();
pramsCurrent.ParameterName="@PageIndex";
pramsCurrent.Value=CurrentPageNumber;
SqlParameter pramsDocount=new SqlParameter();
pramsDocount.ParameterName="@Docount";
pramsDocount.Value=false;
Cmd.Parameters.Add(pramsCurrent);
Cmd.Parameters.Add(pramsDocount);
Cmd.Parameters.Add(pramsPageSize);
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=Cmd;
DataSet ds=new DataSet();
Conn.Open();
da.Fill(ds);
Conn.Close();
ViewState["Count"]=ds.Tables[0].Rows.Count.ToString();
return ds;
}
private void dlParent_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if(e.Item.ItemIndex!=-1)
{
int ClassID=int.Parse(dlParent.DataKeys[e.Item.ItemIndex].ToString());
DataSet ds=BindChild(ClassID);
Label lb=(Label)e.Item.FindControl("lbCount");
lb.Text=" (" + ds.Tables[0].Rows.Count.ToString() + ") ";
DataList list=(DataList)e.Item.FindControl("dlChild");
list.DataSource=ds.Tables[0].DefaultView;
list.DataBind();
HtmlAnchor hr=(HtmlAnchor)e.Item.FindControl("aurl");
HtmlGenericControl dv=(HtmlGenericControl)e.Item.FindControl("KBChild");
hr.ID="KB";
string ss="expandIt('dlParent__ctl"+e.Item.ItemIndex+"_"+hr.ID+"')";
hr.Attributes.Add("onclick",ss.ToString());
dv.ID=hr.ID+"Child";
string scripts="";
Page.RegisterStartupScript("scripts",scripts.ToString());
}
}
private DataSet BindChild(int ClassID)
{
SqlConnection Conn=new SqlConnection(strConn);
SqlCommand Cmd=new SqlCommand("select * from NewsInfo where ClassID="+ClassID+"",Conn);
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=Cmd;
DataSet ds=new DataSet();
Conn.Open();
da.Fill(ds);
Conn.Close();
return ds;
}
protected void NavigationLink_Click ( Object sender, CommandEventArgs e )//此事件为HTML代码里注册(事件为OnCommand)
{
switch ( e.CommandName )//根据设置的CommandName属性判断
{
case "First":
CurrentPageNumber = 1;
break;
case "Last":
CurrentPageNumber = Int32.Parse ( lbTotalPage.Text );
break;
case "Next":
CurrentPageNumber = Int32.Parse ( lbCurrentPage.Text ) + 1;
break;
case "Prev":
CurrentPageNumber = Int32.Parse ( lbCurrentPage.Text ) - 1;
break;
}
BindData();
}
public Int32 GetPCount()
{
SqlConnection Conn=new SqlConnection(strConn);
SqlCommand Cmd=new SqlCommand();
Cmd.Connection=Conn;
Cmd.CommandType=CommandType.StoredProcedure;
Cmd.CommandText="BindNews";
SqlParameter pramsPageSize=new SqlParameter();
pramsPageSize.ParameterName="@PageSize";
pramsPageSize.Value=1;
SqlParameter pramsCurrent=new SqlParameter();
pramsCurrent.ParameterName="@PageIndex";
pramsCurrent.Value=1;
SqlParameter pramsDocount=new SqlParameter();
pramsDocount.ParameterName="@Docount";
pramsDocount.Value=false;
Cmd.Parameters.Add(pramsCurrent);
Cmd.Parameters.Add(pramsDocount);
Cmd.Parameters.Add(pramsPageSize);
Conn.Open();
Int32 Tcount=Int32.Parse(Cmd.ExecuteScalar().ToString());
Conn.Close();
return Tcount;
}
public void BindData()
{
lbCurrentPage.Text = CurrentPageNumber.ToString();
//绑定DATAGRID
DataSet ds=BindParent(PageSize,CurrentPageNumber);
dlParent.DataSource=ds.Tables[0].DefaultView;
dlParent.DataBind();
Double TotalPages = 1;//初始化,总页数为1
Double ModePages=0;//取模余数(判断总页数是否要加1)
Int32 TotalRecords = GetPCount();//调用上面的得到总记录数的方法
TotalPages = TotalRecords / PageSize;//得到总页数(总记录数除以每页的记录数)
ModePages=TotalRecords%PageSize;//得到取模的余数(总记录数取模每页的记录数)
if(ModePages>0)//如果取模数不等于0,则把总页数加1
{
TotalPages+=1;
}
if(ModePages==0)//如果取模数等于0,不做任何事(也可以不用判断)
{
}
if(TotalPages==0)
{
TotalPages=1;
}
lbTotalPage.Text = TotalPages.ToString();//显示页面上的总页数
lbTotalCount.Text=TotalRecords.ToString();//显示页面上的总记录数
//以下为判断点击的按钮(第一页,上一页,下一页,末一页)是否可以用
if ( CurrentPageNumber == 1 )
{
PreviousPage.Enabled = false;
FirstPage.Enabled=false;
if ( TotalPages > 1 )
{
NextPage.Enabled = true;
LastPage.Enabled=true;
}
else
{
NextPage.Enabled = false;
LastPage.Enabled=false;
}
}
else
{
PreviousPage.Enabled = true;
FirstPage.Enabled=true;
if ( CurrentPageNumber == TotalPages )
{
NextPage.Enabled = false;
LastPage.Enabled=false;
}
else
{
NextPage.Enabled = true;
LastPage.Enabled=true;
}
}
ddlPage.Items.Clear();//清楚跳转的页数(如果不清除,里面的记录将会循环增加)
int PCount=int.Parse(lbTotalPage.Text);//得到总页数,为了循环
if(PCount==0)
{
PCount=1;
}
for(int i=1;i<=PCount;i++)
{
ddlPage.Items.Add(i.ToString());
}
ddlPage.Items.FindByText(CurrentPageNumber.ToString()).Selected=true;//把当前页显示在列表框的第一个
}
private void ddlPage_SelectedIndexChanged(object sender, System.EventArgs e)
{
int PageSize=int.Parse(ddlPage.SelectedValue.ToString());
int PageCount=Int32.Parse(lbTotalPage.Text.Trim().ToString());
if(PageSize<1)
{
CurrentPageNumber=1;
}
else if(PageSize>PageCount)
{
CurrentPageNumber=PageCount;
}
else
{
CurrentPageNumber=PageSize;
}
BindData();
}
}
}
注意:在CS文件里开始设置PageSize为每页显示的记录,例子里设置的是5条,可以按照自己的要求修改,
下载例子里有一个DataBase文件夹,里面有数据库ACCESS,你可以导入到SQL中,然后运行文本文件里的分页存储过程,然后修改一下CS文件里的连接字符串即可运行 ,有什么不足的地方请大家指教。
例子下载:/Files/sunnystar365/DataListNesting.rar
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容
- DataList嵌套,分页,点击标题显示内容
- DataList的分页和嵌套,还有点击显示相对内容的关联
- 两个Datalist嵌套如何绑定子Datalist
- Datalist嵌套Repeater显示
- DataList嵌套问题 如何删除内层子DataList的记录
- DataList嵌套问题 如何删除内层子DataList的记录
- DataList嵌套DataList 子DataList访问父DataList数据(1. 页面绑定后台代码实现 纯代码)
- DataList嵌套DataList的实现
- datalist嵌套datalist的实例
- 开发的自定义分页控件(转)
- BOOT,FAT16结构
- Menu、MultiView和View 合作做的tab效果
- Asp.net 2.0的异常处理需要考虑的问题
- DataGrid单元格移动变色,点击变色,双击取消颜色,排序.
- DataList嵌套,分页,点击父DataList标题在子DataList显示相关的内容,点击子DataList标题显示主要内容.
- smartform中的图片大小调整问题
- .NET Remoting中的事件处理
- Hookloggerd 的安装(自己实践)
- 文件的上传和下载
- C#网络编程(socket)
- 自动更新
- ASP.NET无限级分类的非递归实现(存储过程版)
- Hyper-V: 一台服务器变二百台服务器