ASP.NET サイト プロジェクトの開発では、データが表形式で表示されることがよくあります。最も一般的に使用される方法は、おそらく DataGrid が DataSet データをバインドする方法です。私が取り組んだソフトウェア プロジェクトでは、表形式のデータを処理する典型的な方法が 3 つあります。
1. DataGrid はデータ ソースをバインドします。この方法が最もよく使用されますが、DataGrid と ADO.NET の間の完全バインド方法は依然として煩わしいものです。統一された DataGrid スタイルは、さまざまなプロジェクトの特殊なスタイルに適応するのが難しく、DataGrid でのパーソナライズは非常に面倒になります。
2. XML(データ)+XSL(スタイルシート)を使用します。ご理解いただけると思いますが、DataSet を DataGrid にバインドする実装メカニズムはこれにほかなりません。図に示すように、このようなテーブルを実装するために、開発者は好きなだけ XSL スタイルを設計できます。
3. データを HTML に直接描画します。この方法は少し荒っぽいですが、場合によっては非常に効果的です。まず実装コードを見てみましょう。次のコードは、上の図に示されているテーブルを実装します。
1<table style="WIDTH: 100%; BORDER-COLLAPSE: 折りたたみ; HEIGHT: 10px">
2 <tr>
3 <td align="center">
4 <TABLE id="tblContainer" class="MsoNormalTable" style="WIDTH: 380px; BORDER-COLLAPSE: 折りたたみ; HEIGHT: 10px"
5 cellSpacing="0" cellPadding="6" border="1" runat="server" bordercolor="#99cccc">
6 <tr>
7 <tdcolspan="2" align="center">
8 <P><FONT size="3"><STRONG><FONT face="宋体">総務部人事</FONT></STRONG></FONT></P>
9</td>
10</tr>
11 <tr>
12 <td align="center" bgcolor="#003399"><FONT size="2" color="#ffffff"><STRONG>担当者名</STRONG></FONT></td>
13 <td align="center" bgcolor="#003399"><FONT size="2" color="#ffffff"><STRONG>部門の役職</STRONG></FONT></td>
14</tr>
15 </表>
16</td>
17 </tr>
18 </テーブル>
ASP.NET WebControls の Add メソッドを直接使用して、ラベルを HTML セルに追加します。
1パブリック クラス WebForm2 : System.Web.UI.Page
2 {
3
4 構造体 PersonRole
5 {
6 パブリック文字列名。
7 パブリック文字列ロール。
8}
9
10 protected System.Web.UI.HtmlControls.HtmlTable tblContainer;
11 パブリック文字列 strAuditItemID = "A899B637-AC47-42EB-9B61-A61C9C880DDC";
12 private void Page_Load(オブジェクト送信者, System.EventArgs e)
13 {
14 //ここにユーザーコードを入力してページを初期化します
15 if(Request.QueryString["AuditItemID"] != null)
16 {
17 strAuditItemID = Request.QueryString["AuditItemID"].ToString();
18}
19
20 GetTeamMember(strAuditItemID);
21 }
22
23 Web フォーム デザイナーによって生成されたコード#region Web フォーム デザイナーによって生成されたコード
24 オーバーライド protected void OnInit(EventArgs e)
25 {
26 //
27 // CODEGEN: この呼び出しは、ASP.NET Web フォーム デザイナーに必要です。
28 //
29 初期化コンポーネント();
30 ベース.OnInit(e);
31}
32
33 /**//// <概要>
34 /// デザイナーは必要なメソッドをサポートしています - 変更にはコード エディターを使用しないでください
35 /// このメソッドの内容。
36 /// </概要>
37 プライベート void InitializeComponent()
38 {
39 this.Load += new System.EventHandler(this.Page_Load);
40
41 }
42 #エンドリージョン
43
44 プライベート void GetTeamMember(string AuditItemID)
45 {
46 文字列 strMaster、strTeamLeader、strPM;
47 ArrayList al = GetTeamMemberName(AuditItemID, out strMaster, out strTeamLeader, out strPM);
48
49 foreach(すべての個人役割)
50{
51 HtmlTableCellセル=新しいHtmlTableCell();
52 cell.Align = "中央";
53 ラベル lbl = 新しいラベル();
54 lbl.Text = pr.name;
55 lbl.フォント サイズ = 9;
56
57 セル.コントロール.Add(lbl);
58 HTMLTableRow行=新しいHtmlTableRow();
59 row.Cells.Add(セル);
60
61 HtmlTableCell cellRole = new HtmlTableCell();
62 cellRole.Align = "中央";
63 ラベル lblRole = 新しいラベル();
64 lblRole.Text = pr.role;
65 lblRole.Font.Size = 9;
66
67 セルロール.コントロール.Add(lblRole);
68 row.Cells.Add(cellRole);
69
70 tblContainer.Rows.Add(行);
71 }
72 }
73
74 プライベート ArrayList GetTeamMemberName(string AuditItemID, out string strMasterName, out string strTeamLeader,out string strPM)
75 {
76 ArrayList al = 新しい ArrayList();
77 strMasterName = "なし";
78 strTeamLeader = "なし";
79 strPM = "なし";
80
81 人の役割 pr;
82 pr.name = "張三";
83 pr.role = "ゼネラルマネージャー";
84 al.Add(pr);
85
86 pr.name = "李思";
87 pr.role = "副本部長";
88 al.Add(pr);
89
90 pr.name = "王五";
91 pr.role = "セクションメンバー";
92 al.Add(pr);
93
94 pr.name = "趙劉";
95 pr.role = "セクションメンバー";
96 al.Add(pr);
97
98 リターンアル;
99 }
100}
ページを描画するときに、どの方法を使用するかは意見と知恵の問題です。 Web サイト開発では、これら 3 つの方法が典型的に適用され、特に 3 番目の方法は、一部のページ処理のパフォーマンスの問題を解決するのに非常に効果的であることがわかりました。また、レイアウトページのコントロールも自動化でき、DataGridでRenderを書き換えるよりもパーソナライズ処理が容易です。