ASP.NETでセクションとヘッダーを持つテーブルを作成するにはどうすればよいですか?
-
03-07-2019 - |
質問
複数のセクションを含む表形式で提示する必要があるデータがあります。特に、データの各セクションは日ごとに(独自のヘッダーで)分割されます。これは基本的に1回限りの単一ページの取引であり、実際には維持されないため、アーキテクチャに多大な労力を費やしたくありません。
2つのテーブルがあります。ヘッダーとアイテム。
HEADERSの形式は次のとおりです。
date(datetime), type(tinyint), firstline(varchar), secondline(varchar)
ITEMSの形式は
ですid(int), date(datetime), type(tinyint), name(varchar), value1(int),
value2(int), value3(int)
これに似たデータが必要です(1行目と2行目はデータが入力され、3行目は静的テキスト、アイテム行はデータが入力されています):
1/1/2009
--------------------------------------------------------------------------
| [First line] |
--------------------------------------------------------------------------
| [Second line] |
--------------------------------------------------------------------------
| Date | Name | Value 1 | Value 2 | Value 3 |
==========================================================================
| [Date]| [Name] | [Value 1] | [Value 2] | [Value 3] |
--------------------------------------------------------------------------
| [Date]| [Name] | [Value 1] | [Value 2] | [Value 3] |
--------------------------------------------------------------------------
1/2/2009
--------------------------------------------------------------------------
| [First line] |
--------------------------------------------------------------------------
| [Second line] |
--------------------------------------------------------------------------
| Date | Name | Value 1 | Value 2 | Value 3 |
==========================================================================
| [Date]| [Name] | [Value 1] | [Value 2] | [Value 3] |
--------------------------------------------------------------------------
| [Date]| [Name] | [Value 1] | [Value 2] | [Value 3] |
--------------------------------------------------------------------------
これは、現在データベースにあるすべての日に対して繰り返されます。毎日、独自のヘッダーを持つ独自のテーブルがあります。また、タイプ別にフィルタリングされます。ページには、指定したタイプのヘッダーとアイテムのみが表示されます。タイプはtinyintです。
質問は、使用するのに最適なASP.NET要素は何ですか? DataList?グリッドビュー?また、2つのテーブルのデータをヘッダー/アイテム形式で含めるにはどうすればよいですか?
編集: 申し訳ありませんが、これはWindows 2000 / IIS5で動作する必要があることを忘れていたため、ASP.NET 2.0に固執し、3.0または3.5の機能を使用できません。
解決 5
さて、ここに私が思いついた最終的な解決策があります。これは最も効率的でも最速でもないと確信していますが、それを成し遂げて何か他のものに進む必要がありました。
最初のステップは、RowBaseと呼ばれる基本クラスを作成することでした。これは、GetRow()という抽象メソッドを実装した抽象クラスでした。次に、RowBaseからBannerRowとItemRowの2つのクラスを派生させました。これらのクラスには、テーブルで使用されるすべてのデータを含むフィールドが含まれています。
次に、2つのDataTableを作成し、DataAdapterを介して2つのクエリの結果を入力しました。
次に、List <!> lt; RowBase <!> gt;を作成しました。データテーブルで相互作用し、行のタイプに応じてBannerRowまたはItemRowを作成します。
次に、List <!> lt; RowBase <!> gt; .Sortを実行し、日付と行のタイプでソートして、BannerRowsがItemRowsよりも優先されるようにします。
最後に、ウェブフォームにテーブルを作成し、runat = <!> quot; server <!> quot;に設定しました。 id = <!> quot; maintable <!> quot;そして、List <!> lt; RowBase <!> gt;を繰り返し処理しました。各RowBaseでGetRowを呼び出しました。
BannerRowとItemRowにはそれぞれ、正しい形式のデータを含めるようにフォーマットされたHtmlTableRowを返すGetRow()のオーバーライドがありました。次に、条件付きロジックを使用して、ItemRowデータのヘッダー行をすべて挿入しました。
これはRobとBenのアイデアのバリエーションですが、データのより多くのマッサージが含まれているため、両方に賛成票を投じましたが、答えは自分自身にあると考えています。
他のヒント
asp:tableをご覧ください。コード内のネストされた条件付き反復の行と列をプログラムで追加できます。
データをXMLとして返し、XSLTを使用してレポートを作成することをお勧めします。それ以外の場合は、ネストされたGridViewまたはリピーターを使用する必要があります。
パターンが同じ行数などで毎回当てはまる場合。リピーターが最善の策であり、レイアウトが画面上でどのように見えるかを最大限に制御できます。
ページに<asp:Table>
を配置し、コードビハインドからビルドします。
必要な行の多くの列にまたがるエントリを作成できるように、列(セル)にcolspanパラメーターを使用します。
上記のアプリの場合、これは、1行目と2行目のコルスパンが5であることを意味します。