コールバックは TemplateField 上でサポートされていません。

ナオキさんのblogのこちらの話題からです。

http://www.cs.gogo-asp.net/blogs/naoki/archive/2006/06/13/962.aspx

GridViewコントロールでは、EnableSortingAndPagingCallbacksプロパティをTrueに設定することで、並べ替え操作とページング操作がクライアントコールバック機能を使用して動作するようになります。クライアントコールバックは、ページの一部分だけを非同期に更新するASP.NETAjaxと呼べるものです。詳しくはこちらをご参照ください。

ASP.NET Web ページでポストバックせずにプログラムによってクライアント コールバックを実装する

非常に便利なプロパティなのですが、どうやらTemplateFieldを使用している場合には使えないようで、下記のようなエラーが発生してしまいます。

コールバックで適切に更新できないコントロールが一部あるため、コールバックは TemplateField 上でサポートされていません。'GridView1' 上でコールバックをオフにしてください。 

例外の詳細: System.NotSupportedException: コールバックで適切に更新できないコントロールが一部あるため、コールバックは TemplateField 上でサポートされていません。'GridView1' 上でコールバックをオフにしてください。

というわけで、TemplateFieldを使用している場合には、AtlasのUpdatePanelの出番のようです。下記のように、TemplateFieldを使用しているGrideViewコントロールを単純にUpdatePanelでくくってみましたが、きちんとページング操作と並べ替え操作が非同期通信によって行われるようです。

<atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True">
</atlas:ScriptManager>
 
<atlas:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CompanyName"
            DataSourceID="SqlDataSource1" AllowPaging="True" AllowSorting="True">
            <Columns>
                <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" SortExpression="CompanyName" />
                <asp:TemplateField>
                    <ItemTemplate>
                        郵便番号:<asp:Label ID="Label1" runat="server" Text='<%# Eval("PostalCode") %>'></asp:Label><br />
                        住所:<asp:Label ID="Label2" runat="server" Text='<%# Eval("Address") %>' Width="290px"></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>           
    </ContentTemplate>
</atlas:UpdatePanel>
 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
    SelectCommand="SELECT [CompanyName], [PostalCode], [Address] FROM [Customers]">
</asp:SqlDataSource>
ScriptManagerコントロールのEnablePartialRenderingプロパティをTrueに設定するのは、結構忘れがちですのご注意を。