Заголовок Gridview со значком сортировки - PullRequest
1 голос
/ 19 сентября 2011

Я связываю набор данных с GridView в VB .net. У меня есть некоторые пользовательские настройки сортировки, и я хочу отобразить значок рядом с заголовком, если выбран один из 3 вариантов.

Я читал много методов для этого, и я вижу, что у Gridview даже есть стиль заголовка ASC и DESC, который я могу связать с представлением. У меня есть 2 проблемы с этим, хотя:

  1. Я сортирую список с помощью linq в триггере сортировки, затем связываю его с сеткой данных.
  2. Причина, по которой я так поступаю, заключается в том, что я хочу поддерживать несколько уровней сортировки, упорядочивая их по 3 столбцам, а не по 1.

Изменить для ясности В частности, что я хочу сделать, это перебрать значение текста заголовка GridView, посмотреть, соответствует ли оно тому, что я сохранил в viewstate, и, если это так, добавить изображение для этого заголовка в частности. Что-то по сути, как показано ниже, однако headerRow.Cells (y). Текст всегда возвращает "", даже если заголовок содержит текст:

Sub gvPatronData_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    Dim savedSortDirection(), savedSortColumn() As String
    Dim headerRow As GridViewRow = gvPatronData.HeaderRow

    'this sets the values of these variables 
    'as strings equal to the text displayed in the header of the gridview
    _patronBl.SplitPatronSort(savedSortDirection, SortDirection, savedSortColumn, SortColumn)

    If SortDirection <> "" Then
        If e.Row.RowType = DataControlRowType.Header Then
            For x = 0 To savedSortDirection.Length - 1
                For y = 0 To headerRow.Cells.Count - 1
                    If headerRow.Cells(y).Text = savedSortColumn(x) Then
                        If savedSortDirection(x) = "Ascending" Then
                            Dim bGStyle As New System.Web.UI.WebControls.Style()
                            bGStyle.CssClass = "upSort"
                            headerRow.Cells(y).ApplyStyle(bGStyle)
                        Else
                            Dim bGStyle As New System.Web.UI.WebControls.Style()
                            bGStyle.CssClass = "downSort"
                            headerRow.Cells(y).ApplyStyle(bGStyle)
                        End If

                    End If
                Next
            Next
        End If
    End If

End Sub

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Вы пытались зациклить столбцы GridView вместо коллекции ячеек GridViewRow?DataControlField имеет свойство HeaderText .

For Each col As DataControlField In gvPatronData.Columns
   If col.HeaderText = savedSortColumn(x) Then
      If savedSortDirection(x) = "Ascending" Then
         Dim bGStyle As New System.Web.UI.WebControls.Style()
         bGStyle.CssClass = "upSort"
         headerRow.Cells(gvPatronData.Columns.IndexOf(col)).ApplyStyle(bGStyle)
      Else
         Dim bGStyle As New System.Web.UI.WebControls.Style()
         bGStyle.CssClass = "downSort"
         headerRow.Cells(gvPatronData.Columns.IndexOf(col)).ApplyStyle(bGStyle)
      End If
   End If
Next
0 голосов
/ 20 сентября 2011

Вот так я и сделал. На самом деле, сверление в объектах стола было тем местом, где я подходил незадолго до этого.

Sub gvPatronData_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
Dim savedSortDirection(), savedSortColumn() As String
Dim columnCollection As DataControlFieldCollection = gvPatronData.Columns

_patronBl.SplitPatronSort(savedSortDirection, SortDirection, savedSortColumn, SortColumn)

If e.Row.RowType = DataControlRowType.Header Then
    For x = 0 To savedSortDirection.Length - 1
        For Each col As DataControlField In columnCollection
            If col.HeaderText = _headerDictionary(savedSortColumn(x)) Then
                If savedSortDirection(x) = "Ascending" Then
    e.Row.Cells(gvPatronData.Columns.IndexOf(col)).Attributes.Add("Style", _
      "background-image: url(images/arrow_up.png);background-repeat:no-repeat;background-position: 96% 50%;")
                Else
    e.Row.Cells(gvPatronData.Columns.IndexOf(col)).Attributes.Add("Style", _
      "background-image: url(images/arrow_down.png);background-repeat:no-repeat;background-position: 96% 50%;")
                End If
             End If
        Next
    Next
End If

_headerDictionary: это был словарь строк моего DataField в HeaderText, поскольку мой saveSortColumn был полем данных для сортировки.

Защита:

Public Function ColumnDataFieldToHeaderTextDictionary() As Dictionary(Of String, String)
    Dim dict As New Dictionary(Of String, String)
    dict.Add("FirstName", "First Name")
    dict.Add("LastName", "Last Name")
    dict.Add("Phone", "Phone Number")
    dict.Add("Phone2", "Alternate Phone Number")
    dict.Add("Email", "Email")

    Return dict
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...