您的位置:首页 > 其它

自己动手做博客之日志管理-3.2 编码实现系统首页

2007-10-09 13:27 537 查看
结束布局阶段后,得到了系统首页的框架内容,接下来的工作是使用布局中的数据控件Repeater实现图1-3所示的效果。使用Repeater控件分页显示日志数据的代码比较多,第一步在Default.aspx.cs文件中添加如下声明语句:

//数据库连接
public SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);
public static int TotalPage;//定义变量来保存总页数
public int CurPage;//定义变量来保存当前页索引
public int Tnum;//总条数
public int EachPage;//每页总条数

在页面的载入过程Page_Load中添加语句:

protected void Page_Load(object sender, EventArgs e)
{
BindLog();
}

如上所示,在页面加载过程中调用了BindLog()方法,这是个自定义方法,这样做的好处是显而易见的,在后面这种优势会更明显。BindLog()方法包含了以下代码,这些代码比较长,其中包含了为读者添加的大量注释:

void BindLog()
{
//定义查询语句,优先显示置顶日志
String sql = "SELECT * FROM info where hometop=0 order by id desc";
//创建数据库适配器并执行查询语句
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
//创建保存结果集的变量ds
DataSet ds = new DataSet();
//将结果填充表"Table"
da.Fill(ds, "Table");
//创建一个分页对象
PagedDataSource pds = new PagedDataSource();
//设置分页的数据源为"Table"
pds.DataSource = ds.Tables["Table"].DefaultView;
//开启自动分页功能
pds.AllowPaging = true;
//设置每页显示数量
pds.PageSize = 5;
if (Request.QueryString["Page"] != null)
{
CurPage = Convert.ToInt32(Request.QueryString["Page"]);
CurPage = Math.Min(CurPage, pds.PageCount);
CurPage = Math.Max(CurPage, 1);
}
else
{
CurPage = 1;
}
//设置翻页链接
pds.CurrentPageIndex = CurPage - 1;
TotalPage = pds.PageCount;
Tnum = pds.DataSourceCount;
EachPage = pds.Count;
lblCurPage.Text = "第 " + CurPage.ToString() + " / " + TotalPage.ToString() + " 页";
lblTnum.Text = "共: " + Tnum.ToString() + " 条记录 ";
lblEachPage.Text = "每页有: " + EachPage.ToString() + " 条记录";
if (pds.CurrentPageIndex != 0)
lnkFirst.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(1);
if (pds.CurrentPageIndex != TotalPage - 1)
lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(TotalPage);
if (!pds.IsFirstPage)
lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage - 1);
if (!pds.IsLastPage)
lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
//绑定数据源到Repeater控件
repLog.DataSource = pds;
repLog.DataBind();
//关闭连接
ds = null;
da = null;
conn.Close();
}

为了实现在Repeater控件中的分页功能,在上述代码中首先创建了一个分页对象实例,然后使用该实例的DataSource方法设置数据源,并将该实例的AllowPaging方法的值设置为True开启分页功能,接下来的语句设置每页显示5条记录。
再往下的if语句为当获取的参数Page的值不为空时,将获取的值赋值给CurPage,否则将变量CurPage的值设置为1。第二个IF语句判断当前页不是首页时,就设置单击“上一页”时链接的URL。最后将分页实例对象绑定到Repeater控件,并将绑定数据显示在页面中。
在1.2.1节介绍的Repeater控件布局代码中最后包含一个GO按钮,单击它可跳转到指定页面。GO按钮的名称为btnPage,单击事件触发了btnPage_Click方法,在这里编写响应代码,如下所示为这些代码:

protected void btnPage_Click(object sender, EventArgs e)
{
int PageNum = 0, pageid = Convert.ToInt32(txtPage.Text);
if (!txtPage.Text.Equals(""))
PageNum = pageid;
if (PageNum <= 0 || PageNum > TotalPage)
Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(1));
else
Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(PageNum));
}

同样是在该控件的布局代码中“<%#Ding(DataBinder.Eval(Container.DataItem,"homeTop"))%>”的作用是判断当前日志是否为置顶属性,如果是则显示“【置顶】”字符串,否则显示一个空字符。Ding()方法的参数为绑定的homeTop字段,方法完整代码如下:

public string Ding(object obj) {
string str = obj.ToString();
if (str.Equals("1"))
{
return "【置顶】";
}
else
{
return " ";
}
}

我们知道homeTop字段的类型是数字型,值为1时表示是置顶日志。根据这个特性,在Ding()方法首先将传递过来的对象转换为字符串类型,再进行比较是返回“【置顶】”字符串,还是空字符串。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: