repeater 控件实现排序

对于呈现数据库信息的页面表格,我们可以通过repeat、gridview、datalist这三者控件,三者各有优缺点:
repeat控件:呈现速度最快、效率最高、功能最简单。
gridview控件:呈现速度最慢、效率最低、功能最复杂。
datalist控件:介于以上二者之间。
那么,我们到底该如何选择呢?
这其实是要根据实际需要而定的。如果数据库中数据量比较少,那就用gridview。如果数据量比较大,那就用repeat,如果你想实现表格中的一些特别样式(镶嵌控件)而且比较灵活,那就用datalist。
 
不过,对于本人而言,我喜欢repeat控件,因为我重视简洁、效率。对于datalist控件,我没有怎么用过,所以对其不是很了解,但仍让我比较满意。也就是说我几乎不喜欢用gridview,因为弊端太明显了。在我学习的过程中,大部分老师也是建议能不用gridview就不用(虽然功能强大,实现比较简单)。
对于gridview,它的强大在于能简单实现分页、排序、丰富的格式样式以及易于操作的布局。
对于repeat,以上gridview的大部分功能其实都能实现,只不过实现起来相当复杂些,但我们只要掌握它,那么gridview面对repeat而言,就会变得毫无优势。
那么我今天就来介绍一下如果利用repeat控件实现排序功能。
首先在页面上将repeater控件的行标题添加linkbutton控件,并在repeater控件上添加两个事件方法
页面代码:
 
(注意:以下页面信息是本人工程项目中的代码,请自行根据情况更改)
<table>
<asp:RepeaterID="Repeater1" runat="server"OnItemCommand="Repeater1_ItemCommand"
                   OnItemDataBound="Repeater1_ItemDataBound">
        <HeaderTemplate>
             <tr>
                  <th>
                       <asp:LinkButtonID="specialtyName" runat="server"CommandName="specialtyName">专业</asp:LinkButton>
                  </th>
                 <th>
                       <asp:LinkButtonID="classId" runat="server"CommandName="classId">班号</asp:LinkButton>
                  </th>
                  <th>
                       <asp:LinkButtonID="className" runat="server"CommandName="className">班级名称</asp:LinkButton>
                  </th>
                 <th>
                       <asp:LinkButtonID="grade" runat="server"CommandName="grade">年级</asp:LinkButton>
                  </th>
                  <th>
                       <asp:LinkButtonID="classNo" runat="server"CommandName="classNo">班级人数</asp:LinkButton>
                  </th>
                  <th>
                       <asp:LinkButtonID="length" runat="server"CommandName="length">学制</asp:LinkButton>
                  </th>
                  <th>
                       <asp:LinkButtonID="assistantId" runat="server"CommandName="assistantId">辅导员号</asp:LinkButton>
                 </th>
                  <th>
                       <asp:LinkButtonID="explain" runat="server"CommandName="explain">备注</asp:LinkButton>
                  </th>
                  <th>
                       <asp:LinkButtonID="action" runat="server"CommandName="action">操作</asp:LinkButton>
                  </th>
             </tr>
       </HeaderTemplate>
        <ItemTemplate>
             <tr>
                  <td>
                       <%#eval_r("specialtyName")%>
                  </td>
                  <td>
                       <%#eval_r("classId")%>
                  </td>
                  <td>
                       <%#eval_r("className") %>
                  </td>
                  <td>
                       <%#eval_r("grade") %>
                  </td>
                  <td>
                       <%#eval_r("classNo")%>
                  </td>
                  <td>
                       <%#eval_r("length") %>
                  </td>
                  <td>
                       <%#eval_r("assistantId")%>
                  </td>
                  <td>
                       <%#eval_r("explain")%>
                  </td>
                  <td>
                       <ahref="#">删除</a>
                  </td>
             </tr>
       </ItemTemplate>
</asp:Repeater>
</table>
后台代码:
  protectedvoid Page_Load(object sender, EventArgs e)
    {
        //这里是将数据库的数据绑定到repeater控件上,由于代码因工程而异,所以就不写了
        //绑定返回类型为DataTable dt
        GetData=dt.DefaultView;
    }
 
    protectedvoid Repeater1_ItemDataBound(object sender, RepeaterItemEventArgse)
       {
           if (e.Item.ItemType == ListItemType.Header)
           {
               if (ViewState["id"] != null)
               {
                   LinkButton lkbtnSort =(LinkButton)e.Item.FindControl(ViewState["id"].ToString().Trim());
                   lkbtnSort.Text = ViewState["text"].ToString();
               }
           }
       }
 
    protectedvoid Repeater1_ItemCommand(object source, RepeaterCommandEventArgse)
       {
           if (e.Item.ItemType == ListItemType.Header)
           {
               LinkButton lkbtnSort =(LinkButton)e.Item.FindControl(e.CommandName.Trim());
               if (ViewState[e.CommandName.Trim()] == null)
               {
                   ViewState[e.CommandName.Trim()] = "ASC";
                   lkbtnSort.Text = lkbtnSort.Text + "▲";
               }
               else
               {
                   if (ViewState[e.CommandName.Trim()].ToString().Trim() =="ASC")
                   {
                       ViewState[e.CommandName.Trim()] = "DESC";
                       if (lkbtnSort.Text.IndexOf("▲") != -1)
                           lkbtnSort.Text = lkbtnSort.Text.Replace("▲", "▼");
                       else
                           lkbtnSort.Text = lkbtnSort.Text + "▼";
                   }
                   else
                   {
                       ViewState[e.CommandName.Trim()] = "ASC";
                       if (lkbtnSort.Text.IndexOf("▼") != -1)
                           lkbtnSort.Text = lkbtnSort.Text.Trim().Replace("▼", "▲");
                       else
                           lkbtnSort.Text = lkbtnSort.Text + "▲";
                   }
               }
               ViewState["text"] = lkbtnSort.Text;
               ViewState["id"] = e.CommandName.Trim();
               DataView dv = GetData;
               dv.Sort = e.CommandName.ToString().Trim() + " " +ViewState[e.CommandName.Trim()].ToString().Trim();
               Repeater1.DataSource = dv;
               Repeater1.DataBind();
           }
       }
 
    privateDataView GetData
       {
           get
           {
               return Cache["_data"] as DataView;
           }
           set
           {
               Cache["_data"] = value;
           }
       }

 
好了,大功告成,赶紧看看效果吧!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值