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

23 篇文章 0 订阅

    结束布局阶段后,得到了系统首页的框架内容,接下来的工作是使用布局中的数据控件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()方法首先将传递过来的对象转换为字符串类型,再进行比较是返回“【置顶】”字符串,还是空字符串。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值