如何在保持第一列排序的同时按第二列排序?

时间:2013-05-02 20:40:08

标签: javascript vb.net

我正在根据所选的过滤器动态构建的表。我目前能够按我点击的任何行排序。问题是我需要第一行,当我点击另一行时,我将其排序,以便我单击的第二行在第一行的平均值内排序。一个例子我有两列,名字和姓氏。

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

所以说我点击第一个名字行。它将保持不变,因为名字已经有序。但是,当我点击姓氏行时,我希望发生以下情况。

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

我目前正在使用它,因此它一次只按一列排序。我正在使用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方面尝试了它,通过在排序中添加另一列但是如果我无法获得第一列值,它对我没有任何帮助!

如何保留第一列的排序,然后按第二列排序?任何帮助将不胜感激!

更新

借助下面列出的答案,我终于完成了这项工作!这是代码:

    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值的隐藏字段的名称。

1 个答案:

答案 0 :(得分:0)

向名为prevCol的页面添加隐藏字段或类似内容。由于它是一个隐藏的字段,它将与表单一起回发。

postBack事件处理程序中,确保使用该隐藏字段并将其值替换为当前单击的列。

通过这种方式,您将获得单击的列以及之前单击的列。如果你检查了它并且它是空的,你知道你正在开始。

然后,您的移除排序按钮会清除prevCol字段,以确保您重新开始。

所以你的流程看起来像这样:

  • 第一栏点击: prevCol为空,因此您按当前点击的列进行排序,并将其标识符写入prevCol字段 返回页面。

  • 第二栏点击: prevCol现在有一个值。因此,首先按该值排序,然后按提供的列排序。一定要写下来 在回程中将列提供给prevCol

  • 第X列点击:与第二次点击相同。遗憾的是,这将使prevCol成为每次排序的第一列。

当您单击删除排序按钮时,请确保您没有将值写入prevCol,从而开始循环。

通过这种方式,您可以使用每个响应缓存客户端上的前一列,以便在回发期间始终存在。

编辑:

我认为只要服务器不需要知道行的顺序,用jQuery完全在客户端执行此操作会很简单。

所以我花了一些时间思考如何使用jQuery完成这项工作,我发现它比我原先预期的更具挑战性。

James Padolsey的帮助下,我能够轻松地对表行进行排序,但基于前一列的排序逻辑有点奇怪。

This is what I ended up with.

相关问题