使用VB在ASP.Net中对GridView中的事件进行排序

Posted

技术标签:

【中文标题】使用VB在ASP.Net中对GridView中的事件进行排序【英文标题】:Sorting event in GridView in ASP.Net using VB 【发布时间】:2021-12-30 17:27:48 【问题描述】:

我在 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",我不知道我应该进一步做什么。我在关注这个Articel

【问题讨论】:

【参考方案1】:

嗯,基本的设置可以是这样的:

并且始终在您的所有网页中都有 Not IsPost 后台存根。

所以,我有这个标记:

(我使用了向导 - 创建数据源)。然后我 BLOW OUT 数据源设置,并从网页中删除 DataSourc1。

所以,我有这个标记:

   <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

结果是这样的:

当然,现在我总是厌倦了必须键入连接和代码来创建记录集 (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

【讨论】:

我还没有完成,但我知道这是解决方案。 @albert-d-kallal 谢谢你的代码,我很高兴我能按时完成我的工作。 你好,兄弟,我有一个问题。从这个解决方案中,这只做 Desc 或 Asc。这背后的逻辑是什么?? 好的,这更复杂 - 因此我会稍微改变一下。但是请参阅我的编辑 - 我已经发布了如何单击标题 - 如果再次单击,它将反转该列的排序。 感谢您的回复,但我在您编辑之前解决了它,但这对我来说意义重大,很高兴得到回复。

以上是关于使用VB在ASP.Net中对GridView中的事件进行排序的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ajax 在 ASP.NET MVC 中对 GridView 进行异步排序

如何在asp.net(vb)的新标签中打开pdf文件?

在 asp.net 中处理 Gridview 控件中的文本框?

在 asp.net 中的多个页面上打印具有许多列标题的 Datagrid 表

ASP.NET 中 GridView 中的 PageIndexChanging

使用asp.net中的文本框进行Gridview过滤