teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

実装の追記

2018/01/22 00:12

投稿

teretail
teretail

スコア23

title CHANGED
File without changes
body CHANGED
@@ -38,8 +38,7 @@
38
38
  |:|:|
39
39
 
40
40
  ###試したこと
41
- これを実現するために以下のようなイメージで動的に画面を作ることを考えていますが、
41
+ これを実現するために以下のようなイメージで動的に画面を作ることを考えています
42
- より良い方法がございましたらご教授いただければ幸いです。
43
42
 
44
43
  ```vbnet
45
44
  <ajaxToolkit:Accordion>
@@ -75,8 +74,69 @@
75
74
  </ajaxToolkit:Accordion>
76
75
  ```
77
76
 
78
- ぞ宜くお願いいします
77
+ これを実現するために以下のよなプログラムを書きました。
79
78
 
79
+ ```vbnet
80
+ Private Sub SetContents(ByVal control As ControlCollection, ByVal header As DataRow, ByVal content As DataTable)
81
+
82
+ Dim accordion As AjaxControlToolkit.Accordion
83
+ Dim accordionPane As AjaxControlToolkit.AccordionPane
84
+
85
+ Dim table As Table
86
+ Dim tableRow As TableRow
87
+
88
+ Try
89
+
90
+ ' Accordion Header
91
+ table = New Table
92
+ tableRow = CreateRow(header) ' TableRowを生成する関数(省略)
93
+ table.Controls.Add(tableRow)
94
+
95
+ contentRows = content.Select(pattern) ' patternは抽出条件(省略)
96
+
97
+ If (contentRows.Length = 0) Then
98
+ ' コンテンツなし
99
+ control.Add(table)
100
+
101
+ Else
102
+ ' コンテンツあり
103
+
104
+ accordion = New AjaxControlToolkit.Accordion
105
+ accordion.ID = "accordion_" + header("xxx")
106
+ accordion.ContentCssClass = "accordionContent"
107
+ accordion.HeaderCssClass = "accordionHeader"
108
+ accordion.RequireOpenedPane = False
109
+ accordionPane = New AjaxControlToolkit.AccordionPane
110
+ accordionPane.ID = "accordionPane_" + header("xxx")
111
+
112
+ ' ヘッダー追加
113
+ accordionPane.HeaderContainer.Controls.Add(table)
114
+
115
+ ' コンテンツの追加は、再帰呼出しによって行う
116
+ For Each row As DataRow In contentRows
117
+
118
+ SetContents(accordionPane.ContentContainer.Controls, row, content)
119
+
120
+ Next
121
+
122
+ ' ペインの追加
123
+ accordion.Panes.Add(accordionPane)
124
+
125
+ ' 作成したアコーディオンを追加する
126
+ control.Add(accordion)
127
+
128
+ End If
129
+
130
+ Catch ex As Exception
131
+ Throw
132
+ End Try
133
+
134
+ End Sub
135
+ ```
136
+
137
+ より良い方法がございましたらご教授いただければ幸いです。
138
+ よろしくお願いいたします。
139
+
80
140
  ###補足情報(言語/FW/ツール等のバージョンなど)
81
141
  Visual Studio 2015
82
142
  .NET Framework 4.6.2