1

選択したフィルターに応じて動的に構築されるテーブルに取り組んでいます。現在、クリックした行で並べ替えることができます。問題は、別の行をクリックしたときにソートする最初の行が必要であるため、クリックした2番目の行が最初の行の範囲内でソートされるようにすることです。例では、名と姓の 2 つの列があります。

  **FirstName**        **LastName**
    Bob                  Zimmer
    Bob                  Anderson 
    Kathy                Walege
    Kathy                Ball

たとえば、最初の名前の行をクリックするとします。名前はすでに順番に並べられているため、同じままです。しかし、姓の行をクリックすると、次のようになります。

 **FirstName**         **LastName**
   Bob                   Anderson
   Bob                   Zimmer
   Kathy                 Ball
   Kathy                 Walege

私は現在それを機能させているので、一度に1列ずつしかソートされません。これを自分のコードで動作させるために、javascript と vb.net の両方を使用しています。

これがJavaScriptです:

    function SortColumn(col)
        {
            __doPostBack('SortBy',col);
        }

JavaScript 関数を呼び出す vb 関数は次のとおりです。

     Private Function AddSortLinkToColumn(ByVal sSortColumn As String) As String
        Dim sVal As String = ""

        sVal = "<a href=""javascript:SortColumn('" & sSortColumn & "');""><font face=""Webdings"">"
        If m_sSort <> "" AndAlso Split(m_sSort, "-")(0) = sSortColumn AndAlso m_sSortDrxn = "ASC" Then
            sVal &= "&#53;"
        Else
            sVal &= "&#54;"
        End If
        sVal &= "</font></a>"

        Return sVal
    End Function

これは現在、クリックされている列を取得し、それをグローバルソート変数と照合しています。それらが一致すると、上向き矢印が表示されます。失敗すると、下向き矢印が表示されます。

クリックされた最初の列を追跡する必要があることはわかっていますが、その方法がわかりません。ソートに別の列を追加して、vb.net側とjavascript側で試しましたが、最初の列の値を保持できない場合は何の役にも立ちません!

最初の列の並べ替えを維持し、2 番目の列でも並べ替えるにはどうすればよいですか? どんな助けでも大歓迎です!

アップデート

以下にリストされている回答の助けを借りて、私はついにこれを機能させました! コードは次のとおりです。

    function SortColumn(col)
        {
            <% if m_sSort = nothing then %>
                __doPostBack('SortBy', col);
            <% else %>
                __doPostBack('SortBy', document.getElementById("SortField").value + "," + col); 
            <% end if %>
        }

m_sSort は、vb.net 側のパブリック変数でした。「SortField」は、m_sSort 値が格納されていた隠しフィールドの名前でした。

4

1 に答える 1

0

というページに隠しフィールドを追加するprevColか、そのようなものです。非表示のフィールドであるため、フォームと共にポストバックされます。

postBackイベント ハンドラーで、必ずその非表示フィールドを使用し、その値を現在クリックされている列に置き換えてください。

このようにして、クリックされた列と以前にクリックされた列が表示されます。値を確認して空の場合は、開始していることがわかります。

並べ替えの削除ボタンは、prevColフィールドをクリアして、最初からやり直すことを保証します。

したがって、フローは次のようになります。

  • First column click: prevColは空なので、現在クリックされている列でソートしprevCol、返されたページのフィールドにその識別子を書き込みます。

  • 2 番目の列 Click: prevColに値が追加されました。したがって、最初にその値で並べ替えてから、指定された列で並べ替えます。提供された列を必ずprevCol返信に記入してください。

  • X 列クリック: 2 回目のクリックと同じ。本質的に、これはprevCol毎回ソートされる最初の列になります。

並べ替えの削除ボタンをクリックするときは、値を書き込んでprevColサイクルを最初からやり直していないことを確認してください。

このようにして、ポストバック中に常に存在するように、各応答でクライアントの前の列をキャッシュします。

編集:

サーバーが行の順序を知る必要がない限り、jQuery を使用してクライアント側でこれを行うのは簡単だと思いました。

そのため、jQuery を使用してこれを行う方法についてしばらく考えてみたところ、当初の予想よりも少し難しいことがわかりました。

James Padolseyの助けを借りて、テーブルの行を簡単に並べ替えることができましたが、前の列に基づく並べ替えのロジックは少し奇妙でした。

これが私が最終的に得たものです。

于 2013-05-03T15:59:58.897 に答える