Verwendet man das DataGrid Objekt zur Anzeige der Daten ohne das Objekt "ObjectDataSource" dann steht die Funktionen Paging nicht zur Verfügung. Diese lassen sich zwar aktivieren, jedoch wird das Ereignis Sorting nicht abgefangen und es kommt der folgende Fehler:
Die GridView Grid1 löste das Ereignis Sorting aus, das nicht behandelt wurde.
Unter der URL http://www.learnasp.com/freebook/learn/cs_GridViewSortingNoDataSourceControl.aspx habe ich eine Lösung in C# gefrunden ich für meinen Fall auf VB.NET umgschrieben habe.
<%@ Page Language="VB" strict="false" explicit="true" Debug="true" Title="..." %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<html>
<script runat="server">
Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs)
Dim objDataSet As DataSet = New DataSet
Dim StrConnect, StrSelect As String
StrConnect = "..."
Dim objConnection As OleDbConnection = New OleDbConnection
objConnection.ConnectionString = StrConnect
StrSelect = "..."
Dim objCommand As OleDbCommand = objConnection.CreateCommand()
objCommand.CommandText = StrSelect
Dim objAdapter As OleDbDataAdapter = New OleDbDataAdapter
Dim objDataTable As New DataTable
objAdapter.SelectCommand = New OleDbCommand(StrSelect, objConnection)
objAdapter.SelectCommand.Connection.Open()
objAdapter.Fill(objDataTable)
Grid1.DataSource = objDataTable
Grid1.DataBind()
End Sub
'*** gewählte Seite anzeigen
Sub Grid1_PageIndexChanging(ByVal Sender As Object, ByVal e As GridViewPageEventArgs)
Grid1.PageIndex = e.NewPageIndex
Grid1.DataBind()
End Sub
'***Sortierkriterium ein- oder ausgeben
Property GridViewSortDirection() As String
Get
If IsNothing(ViewState.Item("GridViewSortDirection")) Then
Return "desc"
End If
Return ViewState.Item("GridViewSortDirection")
End Get
Set(ByVal Value As String)
ViewState.Item("GridViewSortDirection") = Value
End Set
End Property
'*** Sortierkriterium ändern
Function GetSortDirection()
Dim GridViewSortDirectionNew As String
Select Case GridViewSortDirection
Case "DESC"
GridViewSortDirectionNew = "ASC"
Case "ASC"
GridViewSortDirectionNew = "DESC"
Case Else
GridViewSortDirectionNew = "DESC"
End Select
GridViewSortDirection = GridViewSortDirectionNew
Return GridViewSortDirectionNew
End Function
'*** Sortierung ändern ud auf der gleichen Seite bleiben
Sub grid1_Sorting(ByVal Sender As Object, ByVal e As GridViewSortEventArgs)
Dim myDatatable As New DataTable
myDatatable = Grid1.DataSource
Dim myPageIndex As Integer = Grid1.PageIndex
Dim mySortdirection As String = GetSortDirection()
Dim MyDataView As New DataView(myDatatable)
MyDataView.Sort = e.SortExpression & " " & mySortdirection
Grid1.DataSource = MyDataView
Grid1.DataBind()
Grid1.PageIndex = myPageIndex
End Sub
</script>
<head id="Head1" runat="server">
</head>
<body>
<form id="Form1" runat="server" method="post">
<asp:GridView ID="Grid1" runat="server" AutoGenerateColumns="False" AllowPaging="True" PageSize="3" AllowSorting="True" OnSorting="grid1_Sorting" OnPageIndexChanging="grid1_PageIndexChanging">
<columns>
<asp:BoundField DataField="Datum" HeaderText="datum" SortExpression="Datum" />
<asp:BoundField DataField="titel" HeaderText="Titel" SortExpression="titel"/>
</columns>
</asp:GridView>
</form>
</body>
</html>