在網上看到好多關於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!
