No desenvolvimento de projetos de sites ASP.NET, os dados geralmente são exibidos em formato tabular. O método mais comumente usado é provavelmente a maneira como o DataGrid vincula os dados do DataSet. Nos projetos de software em que trabalhei, existem três formas típicas de processar dados tabulares.
1. DataGrid vincula fonte de dados. Este método é o mais usado, mas o método de ligação perfeita entre DataGrid e ADO.NET ainda é irritante. O estilo uniforme do DataGrid é difícil de se adaptar aos estilos especiais de diferentes projetos, e a personalização no DataGrid será muito problemática.
2. Use XML (dados) + XSL (folha de estilos). Como você pode entender, o mecanismo de implementação de vinculação do DataSet ao DataGrid nada mais é do que isso. Conforme mostrado na figura, para implementar tal tabela, os desenvolvedores podem projetar o estilo XSL tanto quanto desejarem.
3. Desenhe dados diretamente para HTML. Este método é um pouco rudimentar, mas às vezes é muito eficaz. Vejamos primeiro o código de implementação. O código a seguir implementa a tabela mostrada na figura acima.
1<table style="WIDTH: 100%; BORDER-COLLAPSE: colapso; HEIGHT: 10px">
2 <tr>
3 <td alinhar="centro">
4 <TABLE id="tblContainer" class="MsoNormalTable" style="WIDTH: 380px; BORDER-COLLAPSE: colapso; ALTURA: 10px"
5 cellSpacing="0" cellPadding="6" border="1" runat="server" bordercolor="#99cccc">
6 <tr>
7 <td colspan="2" alinhar="centro">
8 <P><FONT size="3"><STRONG><FONT face="宋体">Cargos de Pessoal do Departamento de Gestão Geral</FONT></STRONG></FONT></P>
9</td>
10</tr>
11
12 <td align="center" bgcolor="#003399"><FONT size="2" color="#ffffff"><STRONG>Nome da pessoa</STRONG></FONT></td>
13 <td align="center" bgcolor="#003399"><FONT size="2" color="#ffffff"><STRONG>Posição do Departamento</STRONG></FONT></td>
14</tr>
15</TABELA>
16 </td>
17</tr>
18 </tabela>
Use diretamente o método Add de ASP.NET WebControls para adicionar o rótulo à célula HTML.
1classe pública WebForm2: System.Web.UI.Page
2 {
3
4 estrutura PersonRole
5 {
6 nome de string pública;
7 função de string pública;
8}
9
10 System.Web.UI.HtmlControls.HtmlTable tblContainer protegido;
11 string pública strAuditItemID = "A899B637-AC47-42EB-9B61-A61C9C880DDC";
12 private void Page_Load (remetente do objeto, System.EventArgs e)
13 {
14 //Coloque aqui o código do usuário para inicializar a página
15 if(Request.QueryString["AuditItemID"] != null)
16 {
17 strAuditItemID = Request.QueryString["AuditItemID"].ToString();
18}
19
20 GetTeamMember(strAuditItemID);
vinte e um }
vinte e dois
23 Código gerado pelo Web Forms Designer#region Código gerado pelo Web Forms Designer
24 substituição void protegida OnInit (EventArgs e)
25 {
26 //
27 // CODEGEN: Esta chamada é exigida pelo designer ASP.NET Web Forms.
28 //
29 InicializarComponent();
30 base.OnInit(e);
31}
32
33 /**//// <resumo>
34 /// O Designer suporta métodos necessários - não use o editor de código para modificar
35 /// O conteúdo deste método.
36 /// </summary>
37 vazio privado InitializeComponent()
38 {
39 this.Load += new System.EventHandler(this.Page_Load);
40
41}
42 #regiãofinal
43
44 privado void GetTeamMember(string AuditItemID)
45 {
46 strings strMaster, strTeamLeader, strPM;
47 ArrayList al = GetTeamMemberName(AuditItemID, out strMaster, out strTeamLeader, out strPM);
48
49 foreach(PersonRole pr em al)
50 {
51 HtmlTableCell célula=new HtmlTableCell();
52 células.Align = "Centro";
53 Etiqueta lbl = new Etiqueta();
54 lbl.Text = pr.nome;
55 lbl.Font.Size = 9;
56
57 célula.Controls.Add(lbl);
58 HtmlTableRow linha=new HtmlTableRow();
59 linha.Cells.Add(célula);
60
61 HtmlTableCell cellRole = new HtmlTableCell();
62 cellRole.Align = "Centro";
63 Etiqueta lblRole = new Etiqueta();
64 lblRole.Text = pr.role;
65 lblRole.Font.Size = 9;
66
67 cellRole.Controls.Add(lblRole);
68 linha.Cells.Add(cellRole);
69
70 tblContainer.Rows.Add(linha);
71}
72}
73
74 private ArrayList GetTeamMemberName (string AuditItemID, string de saída strMasterName, string de saída strTeamLeader, string de saída strPM)
75 {
76 ArrayList al = new ArrayList();
77 strNomeMestre = "Nenhum";
78 strTeamLeader = "Nenhum";
79 strPM = "Nenhum";
80
81 PersonRole pr;
82 pr.name = "Zhang San";
83 pr.role = "Gerente Geral";
84 al.Adicionar(pr);
85
86 pr.nome = "李思";
87 pr.role = "Gerente Geral Adjunto";
88 al.Adicionar(pr);
89
90 pr.name = "王五";
91 pr.role = "membro da seção";
92 al.Adicionar(pr);
93
94 pr.name = "Zhao Liu";
95 pr.role = "membro da seção";
96 al.Adicionar(pr);
97
98 retorna al;
99}
100}
Ao desenhar uma página, qual método deve ser usado é uma questão de opinião e sabedoria. No desenvolvimento de sites, esses três métodos têm aplicações típicas, especialmente o terceiro método que descobri que é muito eficaz na resolução de problemas de desempenho de alguns processamentos de páginas. Além disso, o controle da página de layout pode ser automatizado e o processamento personalizado é mais fácil do que reescrever o Render no DataGrid.