我正在根据所选的过滤器动态构建的表。我目前能够按我点击的任何行排序。问题是我需要第一行,当我点击另一行时,我将其排序,以便我单击的第二行在第一行的平均值内排序。一个例子我有两列,名字和姓氏。
**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 &= "5"
Else
sVal &= "6"
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值的隐藏字段的名称。
答案 0 :(得分:0)
向名为prevCol
的页面添加隐藏字段或类似内容。由于它是一个隐藏的字段,它将与表单一起回发。
在postBack
事件处理程序中,确保使用该隐藏字段并将其值替换为当前单击的列。
通过这种方式,您将获得单击的列以及之前单击的列。如果你检查了它并且它是空的,你知道你正在开始。
然后,您的移除排序按钮会清除prevCol
字段,以确保您重新开始。
所以你的流程看起来像这样:
第一栏点击: prevCol
为空,因此您按当前点击的列进行排序,并将其标识符写入prevCol
字段
返回页面。
第二栏点击: prevCol
现在有一个值。因此,首先按该值排序,然后按提供的列排序。一定要写下来
在回程中将列提供给prevCol
。
第X列点击:与第二次点击相同。遗憾的是,这将使prevCol
成为每次排序的第一列。
当您单击删除排序按钮时,请确保您没有将值写入prevCol
,从而开始循环。
通过这种方式,您可以使用每个响应缓存客户端上的前一列,以便在回发期间始终存在。
编辑:
我认为只要服务器不需要知道行的顺序,用jQuery完全在客户端执行此操作会很简单。
所以我花了一些时间思考如何使用jQuery完成这项工作,我发现它比我原先预期的更具挑战性。
在James Padolsey的帮助下,我能够轻松地对表行进行排序,但基于前一列的排序逻辑有点奇怪。