質問
現在、XML データ ファイルからデータを読み取り、オブジェクトの配列に解析して、グリッドビューのデータ ソースにバインドする Web インターフェイスを作成しています。次に、 と を使用して、各列のオブジェクトから必要なデータを取得します。
ただし、このグリッドビューに複数のタブを配置し、おそらく別のリンク ボタンで制御したいと考えています。各タブには異なる列のセットが表示されます。
これを実装する最善の方法は何でしょうか?ページに 3 つの個別の GridView を用意し、(リンク ボタンへのクリックに基づいて) ユーザーが選択した 1 つだけを表示し、他のものはすべて非表示にする必要がありますか?これは不必要に遅くなる可能性があるように思えました。1つのGridView経由で行うことは可能ですか?
現時点では、GridView 全体が AJAX 更新パネルに含まれており、以下のコードが含まれています。
<asp:Panel id="searchResultsGrid" runat="server" CssClass="searchResultsGrid">
<asp:GridView id="gridViewSearchResults" runat="server" AutoGenerateColumns="false"
AllowPaging="True" AllowSorting="True"
PageSize="25" Width="920" PagerSettings-Visible="false">
<Columns>
<asp:templatefield headertext="Test Column 1 Tab 1" HeaderStyle-HorizontalAlign="Left">
<itemtemplate>
<%# GetColumnInfo() %>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Test Column 2 Tab 1" HeaderStyle-HorizontalAlign="Left">
<itemtemplate>
<%# GetColumnInfo() %>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Test Column 3 Tab 1" HeaderStyle-HorizontalAlign="Left">
<itemtemplate>
<%# GetColumnInfo() %>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Test Column 4 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
<itemtemplate>
<%# GetColumnInfo() %>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Test Column 5 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
<itemtemplate>
<%# GetColumnInfo() %>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Test Column 6 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
<itemtemplate>
<%# GetColumnInfo() %>
</itemtemplate>
</asp:templatefield>
<asp:templatefield headertext="Test Column 7 Tab 1" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right">
<itemtemplate>
<%# GetColumnInfo() %>
</itemtemplate>
</asp:templatefield>
</Columns>
<RowStyle CssClass="searchResultEntry borderTopGrey" />
<EmptyDataTemplate>
<p class="searchResultsEmpty">
<asp:Label ID="lblSearchResultsEmpty" runat="server" Text="No records matched the selected criteria. Please revise your criteria and try again." CssClass="searchResultsEmpty"></asp:Label>
</p>
</EmptyDataTemplate>
</asp:GridView>
</asp:Panel>
これは、現在、1 つのタブのコンテンツを含む 1 つのグリッドビュー用のコードです。jdkの応答に基づいて、2番目と3番目のタブに他のTemplateFieldsを追加し、タブリンクボタンがクリックされたときに異なるセットの表示を切り替えるにはどうすればよいでしょうか?
ありがとう!
解決
複数の GridView が存在する場合、ページの ViewState 文字列は非常に (不必要に) 大きくなる可能性があります (結果の HTML ソース コードを表示し、「__VIEWSTATE」を検索して確認してください)。あなたが言ったように、1つの GridView コントロールを使用し、どの LinkButton (別名."タブ") が最近クリックされました。
これもページ分割されたデータのシナリオである場合、3 つのデータ セットのそれぞれの現在のページ番号を表す 3 つの整数の単純な配列を ViewState に保存できるため、データを入れ替えるときにデータの最新のページを表示できます。 1 つの DataGrid コントロールの。
ただし、帯域幅が問題にならない場合(つまり、ページが大量のヒットやイントラネット上で実行されない場合は、最適化についてあまり心配する必要はありません。
他のヒント
以前にも同様のことをしたことがあります。 GridViewのテンプレート列を使用しました。 GridViewに Ajaxコントロールツールキットタブコントロールを配置します。
カスタムの複合コントロールを(タブ付きコンテナーとして)作成し、それにグリッドビューを追加します。 1つにまとめません。