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:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand"
                                       OnItemDataBound="Repeater1_ItemDataBound">
                <HeaderTemplate>
                          <tr>
                                    <th>
                                              <asp:LinkButton ID="specialtyName" runat="server" CommandName="specialtyName">专业</asp:LinkButton>
                                    </th>
                                   <th>
                                              <asp:LinkButton ID="classId" runat="server" CommandName="classId">班号</asp:LinkButton>
                                    </th>
                                    <th>
                                              <asp:LinkButton ID="className" runat="server" CommandName="className">班级名称</asp:LinkButton>
                                    </th>
                                   <th>
                                              <asp:LinkButton ID="grade" runat="server" CommandName="grade">年级</asp:LinkButton>
                                    </th>
                                    <th>
                                              <asp:LinkButton ID="classNo" runat="server" CommandName="classNo">班级人数</asp:LinkButton>
                                    </th>
                                    <th>
                                              <asp:LinkButton ID="length" runat="server" CommandName="length">学制</asp:LinkButton>
                                    </th>
                                    <th>
                                              <asp:LinkButton ID="assistantId" runat="server" CommandName="assistantId">辅导员号</asp:LinkButton>
                                   </th>
                                    <th>
                                              <asp:LinkButton ID="explain" runat="server" CommandName="explain">备注</asp:LinkButton>
                                    </th>
                                    <th>
                                              <asp:LinkButton ID="action" runat="server" CommandName="action">操作</asp:LinkButton>
                                    </th>
                          </tr>
               </HeaderTemplate>
                <ItemTemplate>
                          <tr>
                                    <td>
                                              <%# eval("specialtyName")%>
                                    </td>
                                    <td>
                                              <%# eval("classId")%>
                                    </td>
                                    <td>
                                              <%# eval("className") %>
                                    </td>
                                    <td>
                                              <%# eval("grade") %>
                                    </td>
                                    <td>
                                              <%# eval("classNo")%>
                                    </td>
                                    <td>
                                              <%# eval("length") %>
                                    </td>
                                    <td>
                                              <%# eval_r("assistantId")%>
                                    </td>
                                    <td>
                                              <%# eval("explain")%>
                                    </td>
                                    <td>
                                              <a href="#">删除</a>
                                    </td>
                          </tr>
               </ItemTemplate>
</asp:Repeater>
</table>
 
 
后台代码:
       protected void Page_Load(object sender, EventArgs e)
       {
                 //这里是将数据库的数据绑定到repeater控件上,由于代码因工程而异,所以就不写了
                 //绑定返回类型为DataTable dt
                 GetData=dt.DefaultView;
       }
 
        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
               {
                       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();
                               }
                       }
               }
 
        protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs  e)
               {
                       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();
                       }
               }
 
        private DataView GetData
               {
                       get
                       {
                               return Cache["_data"] as DataView;
                       }
                       set
                       {
                               Cache["_data"] = value;
                       }
               }
 
好了,大功告成,赶紧看看效果吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值