###前提・実現したいこと
ASP.NETにてDBから抽出したデータを以下のように表形式で表示することを考えています。
分類名 | 数値 |
---|---|
大分類 | 中分類の合計 |
中分類1 | 小分類a~dの合計 |
小分類a | 数値 |
小分類b | 数値 |
小分類c | 数値 |
小分類d | 数値 |
中分類2 | 小分類a'~c'の合計 |
小分類a' | 数値 |
小分類b' | 数値 |
小分類c' | 数値 |
中分類3 | 小分類の合計 |
小分類 | 数値 |
: | : |
単純な表でしたら、DataSetにデータを入れて、GridViewにbindすればいいのですが、
アコーディオンにしたいという要求があります。
例えば、中分類1の行をクリックしたら、小分類が隠れ、
もう一度クリックすると再び表示されると言った具合です。
また、大分類をクリックしたら、中分類が隠れることになります。
なお、アコーディオンを開く際は、他のアコーディオンは閉じないようにしたいです。
分類名 | 数値 |
---|---|
大分類 | 中分類の合計 |
中分類1 | 小分類a~dの合計 |
中分類2 | 小分類a'~c'の合計 |
小分類a' | 数値 |
小分類b' | 数値 |
小分類c' | 数値 |
中分類3 | 小分類の合計 |
小分類 | 数値 |
: | : |
###試したこと
これを実現するために以下のようなイメージで動的に画面を作ることを考えています。
vbnet
1<ajaxToolkit:Accordion> 2 <Panes> 3 <ajaxToolkit:AccordionPane> 4 <Header> 5 <table> 中分類 6 </Header> 7 <Content> 8 <asp:GridView> 小分類 9 </Content> 10 </ajaxToolkit:AccordionPane> 11 </Panes> 12</ajaxToolkit:Accordion>
上記のアコーディオンを大項目のアコーディオンに入れる
vbnet
1<ajaxToolkit:Accordion> 2 <Panes> 3 <ajaxToolkit:AccordionPane> 4 <Header> 5 <table> 大分類 6 </Header> 7 <Content> 8 <ajaxToolkit:Accordion> 中分類1 9 <ajaxToolkit:Accordion> 中分類2 10 <ajaxToolkit:Accordion> 中分類3 11 </Content> 12 </ajaxToolkit:AccordionPane> 13 </Panes> 14</ajaxToolkit:Accordion>
これを実現するために以下のようなプログラムを書きました。
vbnet
1 Private Sub SetContents(ByVal control As ControlCollection, ByVal header As DataRow, ByVal content As DataTable) 2 3 Dim accordion As AjaxControlToolkit.Accordion 4 Dim accordionPane As AjaxControlToolkit.AccordionPane 5 6 Dim table As Table 7 Dim tableRow As TableRow 8 9 Try 10 11 ' Accordion Header 12 table = New Table 13 tableRow = CreateRow(header) ' TableRowを生成する関数(省略) 14 table.Controls.Add(tableRow) 15 16 contentRows = content.Select(pattern) ' patternは抽出条件(省略) 17 18 If (contentRows.Length = 0) Then 19 ' コンテンツなし 20 control.Add(table) 21 22 Else 23 ' コンテンツあり 24 25 accordion = New AjaxControlToolkit.Accordion 26 accordion.ID = "accordion_" + header("xxx") 27 accordion.ContentCssClass = "accordionContent" 28 accordion.HeaderCssClass = "accordionHeader" 29 accordion.RequireOpenedPane = False 30 accordionPane = New AjaxControlToolkit.AccordionPane 31 accordionPane.ID = "accordionPane_" + header("xxx") 32 33 ' ヘッダー追加 34 accordionPane.HeaderContainer.Controls.Add(table) 35 36 ' コンテンツの追加は、再帰呼出しによって行う 37 For Each row As DataRow In contentRows 38 39 SetContents(accordionPane.ContentContainer.Controls, row, content) 40 41 Next 42 43 ' ペインの追加 44 accordion.Panes.Add(accordionPane) 45 46 ' 作成したアコーディオンを追加する 47 control.Add(accordion) 48 49 End If 50 51 Catch ex As Exception 52 Throw 53 End Try 54 55 End Sub
より良い方法がございましたらご教授いただければ幸いです。
よろしくお願いいたします。
###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2015
.NET Framework 4.6.2
jQuery 3.1.1
回答1件
あなたの回答
tips
プレビュー