2012-04-17 25 views
1

グリッドビューを使用して1つのテーブルからデータを表示していますが、下のコードを使用して自動ソートできない場合は、「システム」というエラーが表示されます。 Web.HttpException:GridView 'GridView1'発生したイベント処理されなかったソート "VB.NetでGridViewで自動ソートを使用したい場合

イベントをソートするためのコードを記述する必要はありませんが、自動的にソートする必要がありますが、ASPXファイル私は希望becuase私がいないファイル.aspxの.vbファイルからこれをしたいので、切り抜いたフィルタを行うには、クエリを変更するためにそれを使用する必要はありません。ここ

は私のコードです

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にテーブルをバインドすることができます。必要に応じて、複数のsortColumnの文字列を送信することもできます。

関数を作成します:

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. 

幸運!

参考文献:http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx

0

ねえあなたはまた、SQLクエリによってあなたの表示データを並べ替えることができます:

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

あなたはどのような方法で並べ替えることができます,,私はソートtblstudent賢明ます。FNameに従ってきた以上に。

関連する問題