【问题标题】:Sorting after search - gridview1 fired event Sorting which wasn't handled搜索后排序 - gridview1 触发事件排序未处理
【发布时间】:2019-08-12 17:59:04
【问题描述】:

基本上,我最近在我的 asp.net 网站上添加了一个搜索框和按钮。我现在遇到的问题是,即使搜索很干净并且事情能够正常运行,我在运行任何搜索之前和之后都遇到了排序问题。我觉得在 sda(Fill).dt 之后我可能会遗漏一些东西,但我在网上找到的任何东西似乎都没有帮助。在vb中也无济于事。提前致谢。

Imports System
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OleDb
Imports System.Collections
Imports System.Collections.Generic
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports Microsoft.VisualBasic
Public Class ShowPOsAdmin
    Inherits System.Web.UI.Page
    Dim strConn As String = ConfigurationManager.ConnectionStrings("PurchaseOrderConnectionString").ConnectionString
    Dim Connection As SqlConnection = New SqlConnection(strConn)
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Me.IsPostBack Then
            Me.SearchVen()
        End If
    End Sub
    Private Sub SearchVen()
        Dim Constr As String = ConfigurationManager.ConnectionStrings("PurchaseOrderConnectionString").ConnectionString
        Using Con As New SqlConnection(Constr)
            Using cmd As New SqlCommand
                Dim searchword As String = "SELECT PurchaseOrder.PoId, PurchaseOrder.Vendor_Name, PurchaseOrder.POAmount,PurchaseOrder.DateFrom, PurchaseOrder.DateTo, PurchaseOrder.Balance, PurchaseOrder.CodeId, PurchaseOrder.PoNumber, BPNumber, ClassCode.CodeId AS Expr1, ClassCode.CodeDefinition, PurchaseOrder.Notes FROM PurchaseOrder INNER JOIN ClassCode ON PurchaseOrder.CodeId = ClassCode.CodeId"
                If Not String.IsNullOrEmpty(TextBox11.Text.Trim()) Then
                    searchword += " Where PurchaseOrder.PONumber Like @POnumber + '%'"
                    cmd.Parameters.AddWithValue("PONumber", TextBox11.Text.Trim())
                End If
                cmd.CommandText = searchword
                cmd.Connection = Connection
                Using sda As New SqlDataAdapter(cmd)
                    Dim dt As New DataTable()
                    sda.Fill(dt)
                    dt.DefaultView.Sort = "Vendor_Name ASC"
                    GridView1.DataSourceID = ""
                    GridView1.DataSource = dt
                    GridView1.DataBind()
                    ViewState("dt") = dt
                End Using
            End Using
        End Using
    End Sub
    Private Sub DetailsView1_ItemDeleted(sender As Object, e As DetailsViewDeletedEventArgs) Handles DetailsView1.ItemDeleted
        GridView1.DataBind()
        Me.SearchVen()
    End Sub

    Private Sub DetailsView1_ItemInserted(sender As Object, e As DetailsViewInsertedEventArgs) Handles DetailsView1.ItemInserted
        GridView1.DataBind()
        Me.SearchVen()
    End Sub
    Private Sub DetailsView1_ItemUpdated(sender As Object, e As DetailsViewUpdatedEventArgs) Handles DetailsView1.ItemUpdated
        GridView1.DataBind()
        Me.SearchVen()
    End Sub
    Private Sub GridView1_PageIndexChanging(sender As Object, e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging
        GridView1.PageIndex = e.NewPageIndex
        Me.SearchVen()
    End Sub
    Protected Sub TextBox11_TextChanged(sender As Object, e As EventArgs) Handles TextBox11.TextChanged
        Me.SearchVen()
    End Sub
    Protected Sub DetailsView1_PageIndexChanging(sender As Object, e As DetailsViewPageEventArgs) Handles DetailsView1.PageIndexChanging
    End Sub
End Class

【问题讨论】:

  • 如果你在你的sql语句中排序怎么办?如果不可能,为什么说它没有排序?
  • 列已根据供应商名称按字母顺序排序。我指的是单击标题并按gridview上的不同标题对其进行排序。

标签: c# sql asp.net vb.net


【解决方案1】:

这可以帮助你。

诀窍是永远不要依赖于记录的顺序 数据表。对 DataTable 使用 DataView,然后绑定到 数据视图。

Imports System.Data.SqlClient
Imports System.Data

Partial Class PageInitTest
    Inherits System.Web.UI.Page

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

        If Not IsPostBack Then

            Dim conn As New SqlConnection("myconnectionstring")
            Dim command As New SqlCommand("mySQL", conn)
            Dim da As New SqlDataAdapter(command)
            Dim tblData As New DataTable
            da.Fill(tblData)

            ' now the sorting
            Dim dv As New DataView(tblData)

            ' you can also do filtering to not show all of them
            'dv.RowFilter = "MyField = 1"

            dv.Sort = "MyField ASC"    ' ASC or DESC

            ' then bind the control to the DataView, not the DataTable
            dgdMyData.DataSource = dv
            dgdMyData.DataBind()

            conn.Close()

        End If

    End Sub

End Class

链接中的示例:

https://forums.asp.net/t/1063235.aspx?Table+Adapter+problem+with+sort+order

【讨论】:

  • 感谢您抽出宝贵时间调查此事。我只是想澄清一下,数据确实是经过排序的
  • 欢迎您。哦,我明白了。好吧,如果这个答案有帮助,您可以考虑将其标记为已接受。
【解决方案2】:

当您单击 Vendor_Name 时,应该排序到列中的第一个或最后一个。问题是由于搜索它实际上并没有这样做。当您单击其中一个标题(如供应商名称或日期)时,您会收到该错误消息。

【讨论】:

  • 感谢您回答自己的问题,但目前尚不清楚这如何解决您的问题。请添加有关您如何更改代码以使其按需要工作的更多详细信息。
  • 它没有按预期工作。这篇文章旨在作为附加信息。我不知道如何通过 cmets 附加图像,所以我回答了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2015-10-12
  • 1970-01-01
相关资源
最近更新 更多