我的页面上有一个 GridView 控件。GV 不使用任何 .net 控件作为数据源来绑定数据。我在创建自己的 DataTable 和 DataSet 的代码中执行此操作。然后我将此数据集绑定到 GV。接下来我想启用排序列。问题是,当您不使用任何预定义的数据源控件时,这将无法正常工作。你必须写一些代码。不知道是什么代码,用户点击heder后如何对GV进行排序?然后应按此列中的数据对行进行排序。以及如何通过单击相同的链接启用升序和降序排序?
问问题
1657 次
2 回答
1
这是我用过的一些片段。当第 3 次单击同一标题删除该列上的排序并且还将排序顺序较低的列(比删除的排序表达式)提升为较高排序顺序时,这很好,例如here和here。
Protected Sub SortLinkBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim gv As GridView = CType(sender.parent.parent.parent.parent, GridView)
Call UpdateTabPanelProgressSpinner(gv)
Dim dv As New DataView
dv = gv.DataSource
Call BuildSortExprTable("sort" + gv.ID, sender.commandname)
dv.Sort = CurrSortExpressions("sort" + gv.ID)
gv.DataSource = dv
gv.DataBind()
End Sub
Protected Function BuildSortExprTable(ByVal vsName As String, ByVal vsKey As String) As Dictionary(Of String, String)
Dim SortTable As Dictionary(Of String, String)
SortTable = IIf(ViewState(vsName) Is Nothing, New Dictionary(Of String, String), CType(ViewState(vsName), Dictionary(Of String, String)))
If SortTable.Count = 0 Then
SortTable.Add(vsKey, " ASC")
Else
If SortTable.ContainsKey(vsKey) Then
Select Case SortTable(vsKey).ToString
Case " ASC"
SortTable(vsKey) = " DESC"
Case " DESC"
SortTable.Remove(vsKey)
End Select
Else
SortTable.Add(vsKey, " ASC")
End If
End If
ViewState.Add(vsName, SortTable)
Return SortTable
End Function
Protected Function CurrSortExpressions(ByVal vsName As String) As String
Dim SortTable As Dictionary(Of String, String)
SortTable = IIf(ViewState(vsName) Is Nothing, New Dictionary(Of String, String), CType(ViewState(vsName), Dictionary(Of String, String)))
Dim sSorts As String = String.Empty
Dim key As Object
For Each key In SortTable.Keys
sSorts += ", " + key.ToString() + " " + SortTable(key).ToString()
Next
'remove first ", "
If sSorts = "" Then
'nada
Else
sSorts = Right(sSorts, sSorts.Length - 2)
End If
Return sSorts
End Function
于 2010-08-26T13:37:56.473 回答