Wydarzenie sortowania w GridView w ASP.Sieć z wykorzystaniem VB

0

Pytanie

Mam problem z sortowaniem w Gridview. Nie jestem ekspertem w dziedzinie vb.net ale muszę rozwiązać ten problem. Chcę wyjaśnić, jak moje dane są przekazywane do 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() pobierze dla zapytania dane, wykonując kilka kroków

//Ta funkcja służy do pewnej logiki

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

eEmployer otrzymasz wszystkie dane do żądania 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

wreszcie, dane są zwracane w сеточное widok. ale mój problem polega na tym, że ja nie rozumiem, jak mogę zrealizować sortowanie. ja coś zmienił, to opinia AllowSorting="true" SortExpression="EmployerName" i nie wiem, co mam robić dalej. Śledziłem tego artykułu

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

Najlepsza odpowiedź

1

No i podstawowa konfiguracja może być taka:

I ZAWSZE należy zaślepkę Not IsPost back na WSZYSTKICH swoich stronach internetowych.

Mam ten układ:

(Użyłem kreatora tworzenia źródła danych). Następnie WYŁĄCZAM ustawienie źródła danych i usuwam źródło danych 1 ze strony internetowej.

mam ten układ:

   <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>

i mój kod do pobrania taka: (zwróć uwagę, że moje wyobrażenie LoadGrid ma sortowanie domyślne

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

I moja zaślepka zdarzenia tego typu wygląda tak:

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

    LoadGrid(e.SortExpression)

End Sub

I wyniki są następujące:

enter image description here

Teraz, oczywiście, ja się zawsze męczę się od konieczności wprowadzania połączenie i kod w celu utworzenia zestawu rekordów (dostępnych danych), więc mam ta globalna pomocnicza procedura:

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

Edytuj:

więc dodatkowe pytanie polega na tym, jak o sortowanie ASC i DESC.

Cóż, możemy dodać, że jeśli ponownie naciśniesz na tytuł, zmienimy sortuje w odwrotnej kolejności.

do tego trzeba trochę więcej kodu, ale to działa:

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

Jeszcze nie skończyłem, ale rozumiem, że to rozwiązanie.
Julker Nien Akib

@albert-d-kallal dziękuję za dobry kod, a ja cieszę się, że udało mi się skończyć pracę na czas.
Julker Nien Akib

Cześć, bracie, mam jeden problem. Z tego rozwiązania to sprawia, że tylko Desc lub Asc. Jaka jest logika tego??
Julker Nien Akib

Ok, jest to trudniejsze - tak więc, ja bym trochę zmienił sytuację. Ale proszę spojrzeć na moje edycja - opublikowałem, jak można kliknąć na nagłówek - jeśli naciśniesz jeszcze raz, sortowanie dla tej kolumny zmieni.
Albert D. Kallal

Dziękuję za odpowiedź, ale postanowiłem go tuż przed tym, jak dokonasz, ale to wiele dla mnie znaczy, i cieszę się, że odpowiedział.
Julker Nien Akib

W innych językach

Ta strona jest w innych językach

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