2012-04-17 21 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查詢排序。