使用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 中处理 Gridview 控件中的文本框?
在 asp.net 中的多个页面上打印具有许多列标题的 Datagrid 表