2013-05-02 53 views
0

我正在根據所選過濾器動態構建表格。我目前能夠按任意一行進行排序。問題是我需要排序的第一行,當我點擊另一行時,這樣我點擊的第二行就按照第一行的方式排序。一個例子,我有兩列,名字和姓氏。如何在保留第一列的排序的同時按第二列進行排序?

**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); 
     } 

這裏的VB函數調用javascript函數:

 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端添加了另一列來嘗試它,但是如果我不能獲得第一列值,那麼它對我沒有任何好處!

如何保留第一列的排序然後按第二列排序?任何幫助將不勝感激!

UPDATE

在下面列出的答案的幫助下,我終於得到了這個工作!以下是代碼:

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

我對你的瞭解,你正在查看的用戶界面的問題:你如何計劃之間「我想從名字排序,以通過排序切換決定的用戶行爲之間的區分姓氏「和」我想現在按名字和姓氏排序「?用戶無法重新點擊列,這可能會切換/下降。這讓我感到難以置信的用戶界面。 MS Excel通過給你一個對話框來填補任何超過單列排序的問題來解決它。你打算怎麼處理這個? – 2013-05-02 21:07:59

+0

第一次點擊會對行進行排序。如果在同一行上進行第二次點擊,則會以相反的方式對其進行排序。如果第二次點擊位於不同的列上,則它也會按該列與第一行進行排序。第一次點擊後,第三次點擊開始。我明白你在說什麼,並且認爲這對用戶來說有點奇怪。但我仍然很好奇,看看它是如何完成的。 – marthann 2013-05-02 21:19:40

+0

我也有一個鏈接,恢復默認排序,撤消列上的任何排序。 – marthann 2013-05-02 21:58:03

回答

0

在頁面中添加一個隱藏字段,稱爲prevCol或類似的東西。由於它是一個隱藏字段,因此它將與表單一起回傳。

在您的postBack事件處理程序中,確保使用該隱藏字段並將其值替換爲當前單擊的列。

通過這種方式,您將獲得單擊的列以及之前單擊的列。如果你檢查這個值並且它是空的,你就知道你正在開始。

您刪除排序按鈕將清除prevCol字段,以確保您開始新鮮。

所以,你的流程是這樣的:

  • 單擊第一列:prevCol是空的,所以你按目前點擊列,其標識寫入prevCol領域 返回的頁面上。

  • 第二列點擊:prevCol現在有一個值。所以先按該值排序,然後按提供的列進行排序。確保你在回報中寫入 提供的列prevCol

  • 第X列點擊:與第二次點擊相同。繼續這將使prevCol每次排序的第一列。

當您點擊刪除排序按鈕,確保你是不是寫一個值到prevCol,從而開始了循環。

通過這種方式,您可以將每個響應中的客戶端上一列緩存起來,以便在回發期間始終存在。

編輯:

我認爲這將是簡單的交替做到這一點完全與jQuery的客戶端只要服務器並不需要知道行的順序。

所以我花了一些時間思考如何使用jQuery來完成這件事,而且我發現它比我最初預期的要更具挑戰性。

James Padolsey的一些幫助我能夠輕鬆地對錶格行進行排序,但基於前一列的排序邏輯有點奇怪。

This is what I ended up with.

+0

感謝您的回覆!我將嘗試隱藏的變量方法。我用插件嘗試了jQuery方式,無法使其工作。但我確實將列存儲在隱藏字段中。 (這個get通過恢復默認存儲的鏈接清除)我會讓你知道隱藏域是如何工作的! – marthann 2013-05-03 19:41:29

+0

我終於明白了!通過使用隱藏變量的方法,我想出瞭如何連接隱藏字段中的列名並使用它們對列進行排序。我上面發佈了我的完成代碼。非常感謝您的幫助@ Pow-Ian! – marthann 2013-05-06 21:29:14

+0

我很高興你有一些工作。 – 2013-05-07 12:53:52

相關問題