2012-04-17 23 views
1

我正在使用GridView来显示一个表中的数据,但是使用我的下面的代码,它不允许我自动排序,我得到一个错误,指出“系统。 Web.HttpException:GridView的'GridView1'触发事件排序不处理“想在ASP.Net中使用GridView自动排序与VB代码

它应该自动排序,而不需要我写排序事件的代码,我已经使它的工作,但通过ASPX文件,但我不希望使用监守我想更改查询做不同势过滤器,所以我想从.vb文件做到这一点并不.aspx文件

这里是我的代码

Imports System.Data.SqlClient 



Public Class WebForm1 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

     Dim cnnData As New SqlConnection(ConfigurationManager.ConnectionStrings("DataTestConnectionString").ConnectionString) 
    'Dim adData As New SqlDataAdapter 
    Dim dsData As New DataSet 
    Dim strQry As String 

    strQry = "SELECT Student_No, " & _ 
        "FName, " & _ 
        "MName, " & _ 
        "LName, " & _ 
        "Phone_No, " & _ 
        "Major, " & _ 
        "Start_Date, " & _ 
        "Status " & _ 
      "FROM tblStudent" 



    Dim adData As New SqlDataAdapter(strQry, cnnData) 

    adData.Fill(dsData) 
    GridView1.DataSource = dsData 

    GridView1.DataBind() 



    'cnnData.Close() 
    'adData.Dispose() 

End Sub 

End Class 

,这里是我的aspx标记:

<asp:GridView 
     ID="GridView1" 
     runat="server" 
     AllowPaging="True" 
     AllowSorting="True" 
     AutoGenerateColumns="False" 
     DataKeyNames="Student_No" 
     Height="30%" 
     Width="90%" 
     CssClass="GridViewCSS" 
     PagerStyle-CssClass="GridViewPager" 
     AlternatingRowStyle-CssClass="GridViewAlt" 
     DataGridViewLinkColumn="Student_No" 
     > 


    <AlternatingRowStyle CssClass="GridViewAlt"></AlternatingRowStyle> 


     <Columns> 


     <asp:hyperlinkfield 
      DataTextField ="Student_No" 
      navigateurl="./studentedit.aspx"    
      headertext="Employee No" 
      /> 

      <asp:BoundField 
       DataField="Student_No" 
       HeaderText="Student No" 
       ReadOnly="True" 
       SortExpression="Student_No" 
       FooterStyle-Font-Underline ="true" 
       /> 


      <asp:BoundField 
       DataField="FName" 
       HeaderText="First Name" 
       ReadOnly="True" 
       SortExpression="FName" 
       /> 

      <asp:BoundField 
       DataField="MName" 
       HeaderText="Middle Initial" 
       ReadOnly="True" 
       SortExpression="MName" 
       /> 

      <asp:BoundField 
       DataField="LName" 
       HeaderText="Last Name" 
       ReadOnly="True" 
       SortExpression="LName" 
       /> 


      <asp:BoundField 
       DataField="Phone_No" 
       HeaderText="Phone Number" 
       ReadOnly="True" 
       SortExpression="Phone_No" 
       /> 

      <asp:BoundField 
       DataField="Major" 
       HeaderText="Major" 
       ReadOnly="True" 
       SortExpression="Major" 
       /> 

      <asp:BoundField 
       DataField="start_date" 
       HeaderText="Start Date" 
       ReadOnly="True" 
       SortExpression="Start_Date" 
       /> 

      <asp:BoundField 
       DataField="Status" 
       HeaderText="Status" 
       ReadOnly="True" 
       SortExpression="Status" 
       /> 

     </Columns> 

<PagerStyle CssClass="GridViewPager"></PagerStyle> 
     </asp:GridView 

帮助表示赞赏。

谢谢!

回答

0

我不知道你的ASP,但我有一个小技巧,在VB中排序DataTable本身。如您所知,您不能直接对数据表进行排序。但是,您可以对数据视图进行排序。诀窍是创建你的表的视图,排序视图,然后将你的视图转换成新的表。

使用下面的函数,您可以传入数据表,列名进行排序,ASC或DESC进行升序或降序。如果你愿意,你可以从函数中删除“order”参数,视图总是按升序排序。然后,您可以将表格绑定到您的GrindView。如果需要,还可以发送多个sortColumns字符串。

创建功能:

Public Function SortMyTable(ByVal ds As DataTable,_ 
    sortColumn As String, order As String) As DataTable 

    ' Create a DataView of your original dataset 
    Dim view As New DataView(ds) 
    ' Sort your data view. 
    view.Sort = sortColumn + " " + order 
    ' Put your dataview into a new datatable 
    Dim dt As DataTable = view.ToTable() 

    ' Return your newly sorted datatable 
    Return dt 
End Function 

使用功能:

Dim sortColumn As String = "MyColumnName" 
Dim order As String = "ASC" 

' Create your dataset 
Dim ds As New DataTable 
' fill your DataTable 

' Use the function to return a new sorted dataset 
Dim dt As DataTable = SortMyTable(ds, column, order) 
'dt is a new datatable, sorted how you want it. 

祝你好运!

参考文献:在上面我已经排序tblstudent根据FName参数明智

trQry = "SELECT Student_No, " & _ 
       "FName, " & _ 
       "MName, " & _ 
       "LName, " & _ 
       "Phone_No, " & _ 
       "Major, " & _ 
       "Start_Date, " & _ 
       "Status " & _ 
     "FROM tblStudent **order by FName**" 

你可以以任何方式进行排序,,:http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx

0

嘿你还可以你的显示数据,通过SQL查询排序。