Home All Groups Group Topic Archive Search About

Gridview sorting event - Gridview Datasource always Null .. why???

Author
23 Oct 2006 4:19 PM
jobs
The Grid displays with multiple rows. I select a column to sort of a
particular field and the below event is fired, but DataTable is Null so
code is skipped.


The GridView:

     <asp:GridView ID="ChargeGridView" runat="server"
            AutoGenerateColumns="False" DataKeyNames="RouteCode"
Width="700px" SkinID="GridView"
            AllowPaging="True" AllowSorting="true"
OnSorting="ChargeGridView_Sorting" ShowFooter="true"
PagerSettings-Mode="NumericFirstLast">


Protected Sub ChargeGridView_Sorting(ByVal sender As Object, ByVal e
As GridViewSortEventArgs)
        Dim dataTable As DataTable = CType(ChargeGridView.DataSource,
DataTable)
        If Not (dataTable Is Nothing) Then   '****** (THIS IS ALWAYS
FALSE) ****
            Dim dataView As DataView = New DataView(dataTable)
            dataView.Sort = e.SortExpression + " " + e.SortDirection
            Response.Write(e.SortExpression + " " + e.SortDirection)
            ChargeGridView.DataSource = dataView
            ChargeGridView.DataBind()
        End If
    End Sub

Thanks.

Author
23 Oct 2006 7:31 PM
Phil H
jobs wrote:
Show quoteHide quote
> The Grid displays with multiple rows. I select a column to sort of a
> particular field and the below event is fired, but DataTable is Null so
> code is skipped.
>
>
> The GridView:
>
>      <asp:GridView ID="ChargeGridView" runat="server"
>             AutoGenerateColumns="False" DataKeyNames="RouteCode"
> Width="700px" SkinID="GridView"
>             AllowPaging="True" AllowSorting="true"
> OnSorting="ChargeGridView_Sorting" ShowFooter="true"
> PagerSettings-Mode="NumericFirstLast">
>
>
>  Protected Sub ChargeGridView_Sorting(ByVal sender As Object, ByVal e
> As GridViewSortEventArgs)
>         If Not (dataTable Is Nothing) Then   '****** (THIS IS ALWAYS
> FALSE) ****
>             Dim dataView As DataView = New DataView(dataTable)
>             dataView.Sort = e.SortExpression + " " + e.SortDirection
>             Response.Write(e.SortExpression + " " + e.SortDirection)
>             ChargeGridView.DataSource = dataView
>             ChargeGridView.DataBind()
>         End If
>     End Sub
>
> Thanks.

Hi

The first thing I would question is this line:

>         Dim dataTable As DataTable = CType(ChargeGridView.DataSource,
> DataTable)

I notice you set the DataSource property to something substantial
further down. But what value or type of object will
ChargeGridView.DataSource be in the line I quote? Does it exist at that
point?

I'm afraid I'm also moved to comment on your coding style. Remember VB
is not case sensitive. Therefore dataTable and DataTable are treated as
the same. Not a good idea to use type identifiers as variable names.

Phil Hall
Author
24 Oct 2006 7:08 AM
alvinzc
Hi, I afraid that this line

Dim dataTable As DataTable = CType(ChargeGridView.DataSource,
DataTable)

might not be working because the DataSource property of ChargeGridView
would be null after the postback since it is not persisted in
ViewState. Try to use Cache() or Session() to retain the DataSource as
described in my blog at
http://alvinzc.blogspot.com/2006/10/tips-and-tricks-on-cloning-data-bound.html.



Hope this helps...