分析DataList分页和超级链接技术

翻译|其它|编辑:郝浩|2007-05-30 10:07:15.000|阅读 1694 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

             由于要做项目,所以好久了都没上自己的博客了,不知道我的博客有没有经常来的朋友啊?如果有谢谢你们,有空常来啊,可以给我留言啊,有什么不对的地方可以提醒我改正哦。今天本来想把那个 TreeView加框架研究出来的,但是师姐的代码,让我有点吃不消,所以还是没钻研出来怎么把那种效果做出来,还需研究,不过,今天实现了一个很重要的功能,相信大家还是平时做的时候会经常用到的,虽然 ASP.NETDataGrid 的功能很强大,但是 Repeater,DataList 很灵活啊,可以定义自己的样式出来,DataList 可以说是 Repeater 的强化版吧,功能更强大。今天研究了下用 DataList 做分页技术,还有使用其中的一列做超级链接,因为大家知道DataList 是没提供分页属性的,同时它也没有 DataGrid 中的超级链接列,所以需要自己写代码的,两个技术点先给大家列出来,希望对大家有帮助,当然我在做这个的时候也参考了别人的做法的,大家互相学习嘛。

     技术点一:分页主要用到了 sda.Fill(System.Data.DataSet ds ,int startRecord,int maxRecords,string srcTable) 第一个重载方法。

      技术点二:让绑定列一列成为一个超级链接列。

HTML端代码:<%#show(DataBinder.Eval(Container.DataItem,OrderID))%>

在后台代码是一个show() 的方法:

public string show (object orderID)

{

return "<a href=WebForm2.aspx?id="+orderID+" target='_blank'>"+orderID+" </a>";

}

     主要是这两个技术点了,现在给大家看详细的代码,我运行通过的,以后用的时候就可以COPY了,偷下懒,嘿嘿~~~

      第一个页面分页技术的:

前台代码如下:

<TABLE id="Table1" style="Z-INDEX: 101; LEFT: 32px; WIDTH: 752px; POSITION: absolute; TOP: 16px; HEIGHT: 312px" cellSpacing="0" cellPadding="0" width="752" border="0">

<TR>

              <TD style="HEIGHT: 29px"><FONT face="宋体">DataList分页技术和超级链接</FONT></TD>

</TR>

<TR>

           <TD style="HEIGHT: 252px"><asp:datalist id="DataList1" runat="server" Width="576px"

Height="96px">

                                                 <HeaderTemplate>

                                                        定单编号<td>

                                                        员工编号<td>

                                                        定单日期<td>

                                                        运费<td>

                                                        运往所在城市

                                                 </HeaderTemplate>

                                                 <ItemTemplate>

<%# show(DataBinder.Eval(Container.DataItem,"OrderID"))%>

                                                        <td>

<%# DataBinder.Eval(Container.DataItem,"CustomerID")%>

                                                        <td>

<%# DataBinder.Eval(Container.DataItem,"OrderDate")%>

                                                        <td>

<%# DataBinder.Eval(Container.DataItem,"Freight")%>

                                                        <td>

<%# DataBinder.Eval(Container.DataItem,"ShipCity")%>

                                                 </ItemTemplate>

                                          </asp:datalist></TD>

                            </TR>

                            <TR>

                                   <TD><FONT face="宋体">

<asp:linkbutton id="FirstLB" runat="server" OnCommand="LinkButton_Click" CommandName="first">第一页</asp:linkbutton>&nbsp;

<asp:linkbutton id="PreviousLB" runat="server" OnCommand="LinkButton_Click" CommandName="prev">上一页</asp:linkbutton>&nbsp;

<asp:linkbutton id="NextLB" runat="server" OnCommand=LinkButton_Click

CommandName="next">下一页</asp:linkbutton>&nbsp;

<asp:linkbutton id="EndLB" runat="server" OnCommand=LinkButton_Click

CommandName="end">最后一页</asp:linkbutton>&nbsp;&nbsp;

<asp:label id="TotalLbl" runat="server"></asp:label> 当前第<asp:label id="CurrentLbl" runat="server"></asp:label>

<asp:linkbutton id="JumpLB" runat="server" OnCommand=LinkButton_Click CommandName="jump">跳到</asp:linkbutton>

       <asp:textbox id="TextBox1" runat="server" Width="90px"></asp:textbox>

</FONT></TD>

                            </TR>

</TABLE>

后台代码如下:

private void Page_Load(object sender, System.EventArgs e)

              {

                     // 在此处放置用户代码以初始化页面

            PageSize = 12;//每页12条记录

                     if(!Page.IsPostBack)

                     {

                            this.DataListBind();

                            CurrentPage = 0;//当前页习惯设为0

                            ViewState["PageIndex"] = 0;//页索引也设为0

                            //计算总共有多少记录

                            RecordCount = CalculateRecord();

                            //计算总共有多少页

                            PageCount = RecordCount/PageSize;

                            this.TotalLbl.Text = PageCount.ToString();//显示总页数

                            ViewState["PageCount"] = PageCount;//会话 session 对整个 application 有效 ,而视图状态 viewstate相当于某个页面的 session

                     }

              }

              //计算总共有多少条记录

              private  int CalculateRecord()

              {

                     try

                     {

                            int recordCount;

                            SqlConnection con=new SqlConnection("server=.;database=Northwind;uid=sa;pwd=");//数据库使用 Northwind;

                            con.Open();

                            string sql= "select count(*) as count from Orders";

                            SqlCommand cmd = new SqlCommand(sql,con);

                            SqlDataReader sdr = cmd.ExecuteReader();

                            if(sdr.Read())

                            {

                                   recordCount = Int32.Parse(sdr["count"].ToString());

                            }

                            else

                            {

                                   recordCount = 0;

                            }

                            sdr.Close();

                            con.Close();

                            return recordCount;

                     }

                     catch(Exception ex)

                     {

                            throw new Exception(ex.Message);

                     }

              }

              //以第一列定单号做个超级链接,链接到第二页显示定单详细信息

              public string show (object orderID)

              {

               return "<a href=WebForm2.aspx?id="+orderID+" target='_blank'>"+orderID+" </a>";

              }

           //将数据绑定到 Datalist 控件

              public void DataListBind()

              {

                     try

                     {

                            int StartIndex = CurrentPage*PageSize;//设定导入的起终地址

                            string sql = "select * from Orders";

                            DataSet ds = new DataSet();

                            SqlConnection con=new SqlConnection("server=.;database=Northwind;uid=sa;pwd=");

                     con.Open();

                            SqlDataAdapter sda= new SqlDataAdapter(sql,con);

                            sda.Fill(ds,StartIndex,PageSize,"orders");//这是sda.Fill方法的第一次重载,里面的变量分别是数据集 DataSet ,开始记录数 StartRecord,最大的记录数 MaxRecord,数据表名TableName

                            this.DataList1.DataSource = ds.Tables["orders"].DefaultView;

                            this.DataList1.DataBind();

                            this.PreviousLB.Enabled = true;

                            this.NextLB.Enabled = true;

                            if(CurrentPage==(PageCount-1)) this.NextLB.Enabled = false;//当为最后一页时,下一页链接按钮不可用

                            if(CurrentPage==0) this.PreviousLB.Enabled = false;//当为第一页时,上一页按钮不可用

                            this.CurrentLbl.Text = (CurrentPage+1).ToString();//当前页数

                     }

                     catch(Exception ex)

                     {

                            throw new Exception(ex.Message);

                     }

              }

              public void LinkButton_Click(Object sender,CommandEventArgs e)//自己编写的按钮点击事件

              {

                     CurrentPage = (int)ViewState["PageIndex"];//获得当前页索引

                     PageCount = (int)ViewState["PageCount"];//获得总页数

                     string cmd = e.CommandName;

                     //判断cmd,以判定翻页方向

                     switch(cmd)

                     {

                            case "prev"://上一页

                                   if(CurrentPage>0) CurrentPage--;

                                   break;

                            case "next":

                                   if(CurrentPage<(PageCount-1)) CurrentPage++;//下一页

                                   break;

                            case "first"://第一页

                                   CurrentPage=0;

                                   break;

                            case "end"://最后一页

                                   CurrentPage=PageCount-1;

                                   break;

                            case "jump"://跳转到第几页

                       if(this.TextBox1.Text.Trim()==""||Int64.Parse(this.TextBox1.Text.Trim())>PageCount)//如果输入数字为空或超出范围则返回

                                          return;

                                   else

                                   {

                                          CurrentPage=Int32.Parse(this.TextBox1.Text.ToString())-1;

                                       break;

                                   }

              }

                ViewState["PageIndex"] = CurrentPage;//获得当前页

                     this.DataListBind();//重新将 DataList 绑定到数据库

         }

第二页用来显示详细的定单信息

      用的控件是 DataGird

代码如下:

       private void Page_Load(object sender, System.EventArgs e)

              {

                     // 在此处放置用户代码以初始化页面

                  string  id=Request.QueryString["id"];

                     SqlConnection con=new SqlConnection("server=.;database=Northwind;uid=sa;pwd=");

                     con.Open();

                     SqlDataAdapter sda=new SqlDataAdapter();

                     sda.SelectCommand=new SqlCommand("select * from [Order Details] where OrderID='"+id+"'",con);

                     DataSet ds=new DataSet();

                     sda.Fill(ds,"orders");

                     this.DataGrid1.DataSource=ds.Tables["orders"].DefaultView;

                     this.DataGrid1.DataBind();

                     con.Close();

              }


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP