C# asp.net repeater實現排序功能,自動排序,點擊頭部排序,點擊列排序


在網上看到好多關於repeater排序的,自己動手用了,發現一些問題,貼源碼后把發現的問題以及解決方法給出

repeater實現排序功能(單擊升序排列,再單擊降序排列).原理很簡單,在<TD>中加個Onclick,用它來觸發一個LinkButton的服務器事件.LinkButton的服務器事件里重新對數據源進行排序.然后再綁定Repeater.
要實現,首先需要在HTML里面加個javascript函數和兩個Hidden,一個用來儲存要排序的字段,還有一個用來儲存升序還是降序.(asc/desc)
Javascript代碼如下:

要引用JQ框架

<script language="javascript">
    function Getsort(obj)
    {
$("#sortTitle").val(obj);
     //給sortTitle賦值,要有name值
     //如果您沒有引用是JQ,用document . getElementById ( sID )  此處不教大家怎么用js給控件賦值 以及取值了
var sortOrder=$("#<%=sortOrder.ClientID %>").val();
    //獲取sortOrder值,並判斷,如果一樣就重新賦值,值前面有個空格,為了sql語句中用的時候方便
           
   if (sortOrder == ' ASC'
  {  
     $("#<%=sortOrder.ClientID %>").val(" DESC")  
  }
    else
  {   
     $("#<%=sortOrder.ClientID %>").val(" ASC")  
  }
  __doPostBack('ctl00$ContentPlaceHolder1$btnSort','');
    
  }  
       
</script>
//一,18行應為 __doPostBack('此處應找到找到源碼中__doPostBack事件,直接復制過來,細心您會
//發現他把客戶端Id中的_變成了$','');__doPostBack前面是兩個_ _
//比如我的LinkButton Id是btnSort  那么上面就應該寫為 
// __doPostBack('ctl00$ContentPlaceHolder1$btnSort','');
//客戶端Id是ctl00_ContentPlaceHolder1_btnSort,也許你的不是,自己找


HTML中:

<input type="hidden" id="sortTitle" name="sortTitle" />
<input type="hidden" id="sortOrder" runat="server" value=" ASC" name="sortOrder" /> //我的ASC前面有個空格
<asp:LinkButton ID="btnSort" runat="server" name="btnSort" OnClick="btnSort_Click"></asp:LinkButton>
<td onclick="Getsort('num');">
      <b>單擊此處可排序</b>
</td>


后台代碼如下:

private void Page_Load(object sender, System.EventArgs e)
{
    if (!Page.IsPostBack)
    {
        BindData();
    }
   protected void btnSort_Click(object sender, EventArgs e)
        {
          在這個方法里面重新綁定調用Repeater就行了
             BindData();
        }
    public void BindData(int pageIndex, string where)
        {
              
        string sortTitle = Request.Form["sortTitle"];
        if (sortTitle == "" || sortTitle == null)
            sortTitle = "Id";
                   //默認第一次加載按照id排序
        string order = sortTitle + sortOrder.Value;
                  //這樣就獲取了 order 的排序,寫到你的sql語句排序中就行了,完畢
                  //第一個我用客戶端空間,第二個用的是服務器端控件,runat="server" ,注意
        }
  
}

 

 

上面主要列舉了排序功能實現的代碼.在HTML中的onclick中,您可以給Getsort方法不同的參數以獲得對不同的字段進行排序,注意, Getsort方法的參數一定要設置為你想排序的字段名稱.這樣你就可以實現雙擊不同的列頭進行當前列的排序功能.

 整個實現的重點在設置 Repeater的sort屬性,BindData事件中獲取(在哪獲取都行)當前排序的字段和排序順序的String,然后傳給 BindData方法.此方法根據傳來的參數將DataView的Sort重新設置或者寫到你sql語句中,然后綁定Repeater控件.OK!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM