Событие сортировки в GridView в ASP.Сеть с использованием VB

0

Вопрос

У меня возникли проблемы с сортировкой в Gridview. Я не эксперт в области vb.net но я должен решить эту проблему. Я хочу объяснить, как мои данные поступают в GridView.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
//also there is some logic in there but I think that part of the code will not effect
  loadgrid()
End Sub

loadgrid() загрузит для запроса данные, выполнив несколько шагов

//Эта функция используется для некоторой логики

Private Sub loadgrid() Handles B_SEARCH.Click, chkLegacy.CheckedChanged, gvEmployer.PageIndexChanged
        GridDataLoader() 
    End Sub

eEmployer получите все данные для запроса GridView

Public Sub GridDataLoader()
       //some code was there because of searching
        Dim dataTable = Employer.getEmployers(eEmployer, chkLegacy.Checked)
        gvEmployer.DataBind()
    End Sub
Public Function GetEmployers(ByVal eEmployer As tblEmployer, ByVal All As Boolean, Optional ByVal sortExpression As String = Nothing) As DataTable
        Dim query = ""
        query =
                "select employer.EmployerID as EmployerId,
                employer.Employer_Name as EmployerName,
           // the query is so large so i delete all for better understanding
                on (employer.Modified_by=tum.UserID)
                where employer.LegacyID IS NULL  and address.ValidityTo is null"
        'End If

        Dim params = ""
        If All = False Then
            query += " AND employer.ValidityTo is null"
        End If

        If (params.Trim() IsNot "") Then
            query = query & params
        End If
        data.setSQLCommand(query, CommandType.Text)
        Return data.Filldata
    End Function

наконец, данные возвращаются в сеточное представление. но моя проблема в том, что я не понимаю, как я могу реализовать сортировку. я кое-что изменил, это мнение AllowSorting="true" SortExpression="EmployerName" и я не знаю, что мне делать дальше. Я следил за этой статьей

asp.net gridview vb.net
2021-11-20 04:46:50
1

Лучший ответ

1

Ну, базовая настройка может быть такой:

И ВСЕГДА имейте заглушку Not IsPost back на ВСЕХ ваших веб-страницах.

Итак, у меня есть эта разметка:

(Я использовал мастер создания источника данных). Затем я ОТКЛЮЧАЮ настройку источника данных и удаляю источник данных 1 с веб-страницы.

итак, у меня есть эта разметка:

   <div style="width:40%;padding:25px">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="ID" CssClass="table table-hover" AllowSorting="True" >
            <Columns>
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                <asp:BoundField DataField="HotelName" HeaderText="HotelName" SortExpression="HotelName" />
                <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
                <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
            </Columns>
        </asp:GridView>
        <br />
    </div>

и мой код для загрузки такой: (обратите внимание, что мое представление LoadGrid имеет сортировку "по умолчанию"

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        LoadGrid
    End If
End Sub

Sub LoadGrid(Optional strSort = "HotelName")

    GridView1.DataSource = MyRst("SELECT * FROM tblHotels Order by " & strSort)
    GridView1.DataBind()

End Sub

И моя заглушка события такого рода выглядит так:

Protected Sub GridView1_Sorting(sender As Object, e As GridViewSortEventArgs) Handles GridView1.Sorting

    LoadGrid(e.SortExpression)

End Sub

И результаты таковы:

enter image description here

Теперь, конечно, я всегда устаю от необходимости вводить соединение и код для создания набора записей (DataTable), поэтому у меня есть эта глобальная вспомогательная процедура:

Public Function MyRst(strSQL As String) As DataTable

    Dim rstData As New DataTable
    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(strSQL, conn)
            conn.Open()
            rstData.Load(cmdSQL.ExecuteReader)
        End Using
    End Using

    Return rstData
End Function

Редактировать:

итак, дополнительный вопрос заключается в том, как насчет сортировки ASC и DESC.

Ну, мы могли бы добавить, что если вы снова нажмете на заголовок, мы изменим сортировку в обратном порядке.

для этого потребуется немного больше кода, но это сработало бы:

Sub LoadGrid(Optional strSort As String = "HotelName",
             Optional SortASC As Boolean = True)

    Dim rstTable As DataTable
    rstTable = MyRst("SELECT * FROM tblHotels")
    rstTable.DefaultView.Sort = strSort & " " & If(SortASC, "ASC", "DESC")
    GridView1.DataSource = rstTable
    GridView1.DataBind()

    ViewState("Sort") = strSort
    ViewState("SortASC") = SortASC
End Sub

Protected Sub GridView1_Sorting(sender As Object, e As GridViewSortEventArgs) Handles GridView1.Sorting

    If ViewState("Sort") = e.SortExpression Then
        ViewState("SortASC") = Not ViewState("SortASC")
    Else
        ViewState("SortASC") = True
    End If
    LoadGrid(e.SortExpression, ViewState("SortASC"))

End Sub
2021-11-21 08:56:42

Я еще не закончил, но понимаю, что это решение.
Julker Nien Akib

@albert-d-kallal спасибо вам за хороший код, и я рад, что мне удалось закончить свою работу вовремя.
Julker Nien Akib

Привет, братан, у меня одна проблема. Из этого решения это делает только Desc или Asc. Какова будет логика этого??
Julker Nien Akib

Ладно, это сложнее - таким образом, я бы немного изменил ситуацию. Но посмотрите мое редактирование - я опубликовал, как вы могли нажать на заголовок - если вы нажмете еще раз, сортировка для этого столбца изменится.
Albert D. Kallal

Спасибо за ваш ответ, но я решил его как раз перед тем, как вы отредактируете, но это много значит для меня, и я рад, что ответил.
Julker Nien Akib

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................