2012-04-09 11 views
0

私はListViewです。その中で私は<table>をアイテムテンプレートとして使用しています。私は<td>クラス名を使用して項目を並べ替える必要があります。リストビュー内で​​クラスを使用してアイテムを並べ替える方法は?

どうすればいいですか?これはボタンをクリックしても動作します。

<asp:ListView ID="lstvRCGroupSource" runat="server" ViewStateMode="Disabled"> 
    <LayoutTemplate> 
     <ul id="list3" class="conn" style="width: 90%; height: 171px;"> 
      <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder> 
     </ul> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <li class="add" id="l3"> 
      <table id="tbl" style="width: 100%;"> 
       <tr class="mytr" style="width: 100%;"> 
        <td class="border1" style="width: 50%;"><%# Eval("code") %></td> 
        <td class="border2" style="width: 50%;"><%# Eval("regon_name") %></td> 
       </tr> 
      </table> 
     </li> 
    </ItemTemplate> 
</asp:ListView> 

function sortUnorderedList(ul, sortDescending) { 
    if (typeof ul == "string") 
     ul = document.getElementById(ul); 

    var lis = ul.getElementsByTagName("li"); 
    var vals = []; 

    for (var i = 0, l = lis.length; i < l; i++) 
     vals.push(lis[i].innerHTML); 

    vals.sort(); 

    if (sortDescending) 
     vals.reverse(); 

    for (var i = 0, l = lis.length; i < l; i++) 
     lis[i].innerHTML = vals[i]; 
} 

window.onload = function() { 
    var desc = false; 
    document.getElementById("stCodeDSC").onclick = function() { 
     sortUnorderedList("list3", desc); 
     desc = !desc; 
     return false; 
    } 
} 
+0

あなたは、これが生成するHTMLを提供してくださいすることができます。また、 'li'のようなインライン要素の中で' table'のようなブロックレベルの要素を使うのは無効です。 –

+0

私はalredyがそのコードを投稿しました... –

+0

いいえ、それはASP.Netコントロールです。ブラウザがレンダリングするHTMLを投稿してください。 –

答えて

1

私は、DataGridまたはDataGridViewのを使用します。これは、すでに構築されたメカニズムをソートしてい

0

をOnItemCommand使用しない理由:。

リストビューの表にLinkBut​​tonコントロールをしてください:

<table id="tbl" style="width: 100%;"> 
      <tr class="mytr" style="width: 100%;"> 
       <td class="border1" style="width: 50%;"> 
        <asp:LinkButton ID="LinkButton1" runat="server"><%# Eval("code") %></asp:LinkButton> 
        </td> 
       <td class="border2" style="width: 50%;"> 
       <asp:LinkButton ID="LinkButton2" runat="server"><%# Eval("regon_name") %></asp:LinkButton> 
       </td> 
      </tr> 
     </table> 

をOnItemCommand内のLinkBut​​ton Clickイベントを探す:

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) 
    { 
     if (e.CommandName.Equals("Code")) 
     { 
      // sorting code 
     } 

     if (e.CommandName.Equals("RegionName")) 
     { 
      // sorting code 
     } 
    } 
+0

@Shauraj:あなたが間違ってしまった。 –

0

このjQuery sorting functionをご覧ください。あなたのコードで実装するのはかなり簡単です。

はここで機能だ:

jQuery.fn.sortElements = (function(){ 

    var sort = [].sort; 

    return function(comparator, getSortable) { 

     getSortable = getSortable || function(){return this;}; 

     var placements = this.map(function(){ 

      var sortElement = getSortable.call(this), 
       parentNode = sortElement.parentNode, 

       // Since the element itself will change position, we have 
       // to have some way of storing its original position in 
       // the DOM. The easiest way is to have a 'flag' node: 
       nextSibling = parentNode.insertBefore(
        document.createTextNode(''), 
        sortElement.nextSibling 
       ); 

      return function() { 

       if (parentNode === this) { 
        throw new Error(
         "You can't sort elements if any one is a descendant of another." 
        ); 
       } 

       // Insert before flag: 
       parentNode.insertBefore(this, nextSibling); 
       // Remove flag: 
       parentNode.removeChild(nextSibling); 

      }; 

     }); 

     return sort.call(this, comparator).each(function(i){ 
      placements[i].call(getSortable.call(this)); 
     }); 

    }; 

})(); 

と実装は次のようになります。

$("#list3 li td").sortElements(function(a, b){ 
    return $(a).attr("class") > $(b).attr("class") ? 1 : -1; 
}); 
関連する問題