Posts
247
Comments
67
Trackbacks
4
Sorting bei Datagrid ohne Verwendung von ObjectDataSource

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>

posted on Tuesday, January 31, 2006 11:45 AM Print
Comments
Gravatar
# 
TJ
7/24/2006 8:34 AM
Danke f&#252;r das super Beispiel - hast mir den Tag gerettet :)

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 7 and 5 and type the answer here: