VBScript:从Scripting.Dictionary中排序项目

时间:2012-07-03 19:08:22

标签: database sorting asp-classic vbscript scripting.dictionary

我有以下代码......它抓取这样的数据:

  

name1,name4,name2,name3

和这样的列表([]是一个复选框):

  

[] name 1 [] name 4 [] name 2 [] name 3

<%
    Set DicionarioMyData = CreateObject("Scripting.Dictionary")
    Set MyData= TarefasConexaoMSSQL.Execute("SELECT A FROM TABLE")
    If Not MyData.EOF Then

        Do While Not MyData.EOF
            ItensDoMyData = MyData("A")

            If Not IsNull(ItensDoMyData) Then
                ItensSeparadosDoMyData = Split(ItensDoMyData, ",")

                For i = 0 To UBound(ItensSeparadosDoMyData)
                    ItensDoMyData = Trim(ItensSeparadosDoMyData(i))

                    If Not DicionarioMyData.Exists(ItensDoMyData) Then
                        DicionarioMyData.Add ItensDoMyData, i
                        %>
                  <input name="itens" type="checkbox" value="<% Response.Write ItensDoMyData %>"><label><% Response.Write ItensDoMyData %></label>
                        <%
                    End If
                Next
            End If
         MyData.MoveNext
    End If
%>

它正在工作,但我无法对其进行排序,因此正确的输出应为:

  

[] name 1 [] name 2 [] name 3 [] name 4

是否可以对这种输出进行排序?

1 个答案:

答案 0 :(得分:1)

VBScript并没有提供良好的排序选项,但是在远程现代的任何东西上,您都可以访问.NET提供的COM Visible类,其中一个是System.Collections.SortedList类。

因此,您的代码可能看起来更像这样

Dim sl : Set sl = CreateObject("System.Collections.SortedList")

Dim rs : Set rs = conn.Execute("SELECT SomeField FROM SomeTable") 

If Not rs.EOF Then 

    Do While Not rs.EOF  
        If Not IsNull(rs("SomeField")) Then  
            AddStringListToSortedList rs("SomeField"), sl
        End If
    Loop

End If

rs.Close

For i = 0 To sl.Count - 1
    WriteCheckBox sl.GetKey(i)
Next

Sub AddStringListToSortedList(stringList, sortedList)

    Dim arr: arr = Split(stringList, ",")
    Dim i, item
    For i = 0 To UBound(arr)
        item = Trim(arr(i))
        If item <> "" Then
            If Not sortedList.Contains(item) Then
                sortedList.Add item, i
            End If
        End If
    Next

End Sub

Function WriteCheckbox(value)
%>
<input name="itens" type="checkbox" value="<%=Server.HTMLEncode(value)%>" /><label><%=Server.HTMLEncode(value) %></label>
<%
End Function