测试库
1CREATE TABLE [T_NanshouyongTest] (2 [ProvName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,3 [AnserOne] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,4 [AnserOnePoint] [int] NULL ,5 [AnserTwo] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,6 [AnserTwoPoint] [int] NULL 7) ON [PRIMARY]8GO
CTemplateCol.cs
1using System; 2using System.Web.UI; 3using System.Web.UI.WebControls; 4using System.Data; 5 6namespace Test1.ItemplateTest 7{ 8 public class CTemplateCol:ITemplate 9 {10 private string colname;11 TextBox l;12 public CTemplateCol(string cname)13 {14 colname=cname;15 }1617 //must implement following method18 public void InstantiateIn(Control container)19 {20 l = new TextBox();21 l.ID=colname;22 l.DataBinding +=23 new EventHandler(this.OnDataBinding);24 container.Controls.Add(l);25 }26 public void OnDataBinding(object sender, EventArgs e)27 {28 TextBox l = (TextBox) sender;29 DataGridItem container =30 (DataGridItem) l.NamingContainer;31 l.Text =32 ((DataRowView)33 container.DataItem)[colname].ToString();34 }35 }3637}38
CTemplateColLabel.cs
1using System; 2using System.Web.UI; 3using System.Web.UI.WebControls; 4using System.Data; 5 6namespace Test1.ItemplateTest 7{ 8 /**//// <summary> 9 /// CTemplateColLabel 的摘要说明。10 /// </summary>11 public class CTemplateColLabel:ITemplate12 {13 private string colname;14 Label l;15 public CTemplateColLabel(string cname)16 {17 colname=cname;18 }1920 public void InstantiateIn(Control container)21 {22 l = new Label();23 l.ID=colname;24 l.DataBinding +=25 new EventHandler(this.OnDataBinding);26 container.Controls.Add(l); 27 }2829 public void OnDataBinding(object sender, EventArgs e)30 {31 Label l = (Label) sender;32 DataGridItem container =33 (DataGridItem) l.NamingContainer;34 l.Text =35 ((DataRowView)36 container.DataItem)[colname].ToString();37 }38 }39}40
asp.net Html
1<%@Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Test1.WebForm1" %> 2<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 3<HTML> 4 <HEAD> 5 <title>WebForm1</title> 6 <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"> 7 <meta content="C#" name="CODE_LANGUAGE"> 8 <meta content="JavaScript" name="vs_defaultClientScript"> 9 <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">10 </HEAD>11 <body>12 <form id="Form1" method="post" runat="server">13 <asp:DataGrid id="grdMytest" runat="server" AutoGenerateColumns="False">14 <Columns>15 <asp:BoundColumn DataField="ProvName" HeaderText="投标人"></asp:BoundColumn>16 </Columns>17 </asp:DataGrid>18 <asp:Button id="Button1" runat="server" Text="Button"></asp:Button>19 </form>20 </body>21</HTML>22
后台代码
1using System; 2using System.Collections; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Web; 7using System.Web.SessionState; 8using System.Web.UI; 9using System.Web.UI.WebControls; 10using System.Web.UI.HtmlControls; 11 12using System.Data.SqlClient; 13using Test1.ItemplateTest; 14 15namespace Test1 16{ 17 /**//// <summary> 18 /// WebForm1 的摘要说明。 19 /// </summary> 20 public class WebForm1 : System.Web.UI.Page 21 { 22 protected System.Web.UI.WebControls.Button Button1; 23 protected System.Web.UI.WebControls.DataGrid grdMytest; 24 25 26 private void Page_Load(object sender, System.EventArgs e) 27 { 28 //添加应答列 29 TemplateColumn tc1 = new TemplateColumn(); 30 tc1.ItemTemplate = new CTemplateColLabel("AnserOne"); 31 grdMytest.Columns.Add(tc1); 32 33 //添加分数列 34 TemplateColumn tc2=new TemplateColumn(); 35 tc2.ItemTemplate=new CTemplateCol("AnserOnePoint"); 36 grdMytest.Columns.Add(tc2); 37 38 //添加应答列 39 TemplateColumn tc3 = new TemplateColumn(); 40 tc3.ItemTemplate = new CTemplateColLabel("AnserTwo"); 41 grdMytest.Columns.Add(tc3); 42 43 //添加分数列 44 TemplateColumn tc4=new TemplateColumn(); 45 tc4.ItemTemplate=new CTemplateCol("AnserTwoPoint"); 46 grdMytest.Columns.Add(tc4); 47 48 SqlConnection con = new SqlConnection("Persist Security Info=false;Data Source=192.168.0.9;Initial Catalog=TjgpE;User ID=sa;Password=;"); 49 SqlDataAdapter da = new SqlDataAdapter("select * from T_NanshouyongTest",con); 50 DataTable dt = new DataTable(); 51 da.Fill(dt); 52 grdMytest.DataSource = dt; 53 grdMytest.DataBind(); 54 } 55 56 Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码 57 override protected void OnInit(EventArgs e) 58 { 59 // 60 // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 61 // 62 InitializeComponent(); 63 base.OnInit(e); 64 } 65 66 /**//// <summary> 67 /// 设计器支持所需的方法 - 不要使用代码编辑器修改 68 /// 此方法的内容。 69 /// </summary> 70 private void InitializeComponent() 71 { 72 this.grdMytest.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.grdMytest_ItemCreated); 73 this.Button1.Click += new System.EventHandler(this.Button1_Click); 74 this.Load += new System.EventHandler(this.Page_Load); 75 76 } 77 #endregion 78 79 private void grdMytest_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) 80 { 81 if(e.Item.ItemType == ListItemType.Header) 82 { 83 e.Item.SetRenderMethodDelegate(new RenderMethod(NewRenderMothodItem));//输出流重定向(按项目) 84 } 85 } 86 87 private void NewRenderMothodItem(HtmlTextWriter writer,Control ctl) 88 { 89 //输出第一行第一列(投标人名称) 90 TableCell cell0 = new TableCell(); 91 cell0.RowSpan = 2; 92 cell0.Text = "投标人名称"; 93 cell0.RenderControl(writer); 94 95 //输出要合并的第一行 96 TableCell cell = new TableCell(); 97 cell.Text = "资信要求"; 98 cell.ColumnSpan = 4; 99 cell.HorizontalAlign = HorizontalAlign.Center;100 cell.RenderControl(writer);101102 //添加一行103 writer.RenderBeginTag(HtmlTextWriterTag.Tr);104 //添加合并的第二行第一列105 cell = null;106 cell = new TableCell();107 cell.ColumnSpan = 2;108 cell.Text = "问:质保";109 cell.HorizontalAlign = HorizontalAlign.Center;110 cell.RenderControl(writer);111112 //添加合并的第二行第二列113 cell = null;114 cell = new TableCell();115 cell.ColumnSpan = 2;116 cell.Text = "问:售后";117 cell.HorizontalAlign = HorizontalAlign.Center;118 cell.RenderControl(writer);119120 writer.RenderEndTag();//</tr>121122 }123124 private void Button1_Click(object sender, System.EventArgs e)125 {126 foreach(DataGridItem item in grdMytest.Items)127 {128 TextBox txtPoint = (TextBox)item.FindControl("AnserOnePoint");129 Response.Write(txtPoint.Text.Trim()+"<br>");130 }131 }132 }133}
其实这种动态生成的页面,最大的难点还是在生成的算法上。明天好好想想。
转载于:https://www.cnblogs.com/nanshouyong326/archive/2006/12/25/603372.html