repeater 控件实现排序

来源:互联网 发布:怎样找软件bug 编辑:程序博客网 时间:2024/05/17 09:30
对于呈现数据库信息的页面表格,我们可以通过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 0
原创粉丝点击