![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
测试库
1
CREATE 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]
8
GO
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
CTemplateCol.cs
1
using System;
2
using System.Web.UI;
3
using System.Web.UI.WebControls;
4
using System.Data;
5![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
namespace Test1.ItemplateTest
7![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
8
public class CTemplateCol:ITemplate
9![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
10
private string colname;
11
TextBox l;
12
public CTemplateCol(string cname)
13![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
14
colname=cname;
15
}
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
//must implement following method
18
public void InstantiateIn(Control container)
19![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
28
TextBox l = (TextBox) sender;
29
DataGridItem container =
30
(DataGridItem) l.NamingContainer;
31
l.Text =
32
((DataRowView)
33
container.DataItem)[colname].ToString();
34
}
35
}
36![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
}
38![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
CTemplateColLabel.cs
1
using System;
2
using System.Web.UI;
3
using System.Web.UI.WebControls;
4
using System.Data;
5![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
namespace Test1.ItemplateTest
7![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
8![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
9
/// CTemplateColLabel 的摘要说明。
10
/// </summary>
11
public class CTemplateColLabel:ITemplate
12![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
private string colname;
14
Label l;
15
public CTemplateColLabel(string cname)
16![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
17
colname=cname;
18
}
19![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
public void InstantiateIn(Control container)
21![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
22
l = new Label();
23
l.ID=colname;
24
l.DataBinding +=
25
new EventHandler(this.OnDataBinding);
26
container.Controls.Add(l);
27
}
28![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
public void OnDataBinding(object sender, EventArgs e)
30![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
后台代码
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Web;
7
using System.Web.SessionState;
8
using System.Web.UI;
9
using System.Web.UI.WebControls;
10
using System.Web.UI.HtmlControls;
11![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
using System.Data.SqlClient;
13
using Test1.ItemplateTest;
14![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
namespace Test1
16![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
17![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
18
/// WebForm1 的摘要说明。
19
/// </summary>
20
public class WebForm1 : System.Web.UI.Page
21![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
22
protected System.Web.UI.WebControls.Button Button1;
23
protected System.Web.UI.WebControls.DataGrid grdMytest;
24![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
private void Page_Load(object sender, System.EventArgs e)
27![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
28
//添加应答列
29
TemplateColumn tc1 = new TemplateColumn();
30
tc1.ItemTemplate = new CTemplateColLabel("AnserOne");
31
grdMytest.Columns.Add(tc1);
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
//添加分数列
34
TemplateColumn tc2=new TemplateColumn();
35
tc2.ItemTemplate=new CTemplateCol("AnserOnePoint");
36
grdMytest.Columns.Add(tc2);
37![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
//添加应答列
39
TemplateColumn tc3 = new TemplateColumn();
40
tc3.ItemTemplate = new CTemplateColLabel("AnserTwo");
41
grdMytest.Columns.Add(tc3);
42![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
//添加分数列
44
TemplateColumn tc4=new TemplateColumn();
45
tc4.ItemTemplate=new CTemplateCol("AnserTwoPoint");
46
grdMytest.Columns.Add(tc4);
47![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
57
override protected void OnInit(EventArgs e)
58![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
59
//
60
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
61
//
62
InitializeComponent();
63
base.OnInit(e);
64
}
65
66![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
67
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
68
/// 此方法的内容。
69
/// </summary>
70
private void InitializeComponent()
71![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
}
77
#endregion
78![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
private void grdMytest_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
80![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
81
if(e.Item.ItemType == ListItemType.Header)
82![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
83
e.Item.SetRenderMethodDelegate(new RenderMethod(NewRenderMothodItem));//输出流重定向(按项目)
84
}
85
}
86![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
private void NewRenderMothodItem(HtmlTextWriter writer,Control ctl)
88![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
89
//输出第一行第一列(投标人名称)
90
TableCell cell0 = new TableCell();
91
cell0.RowSpan = 2;
92
cell0.Text = "投标人名称";
93
cell0.RenderControl(writer);
94![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
//输出要合并的第一行
96
TableCell cell = new TableCell();
97
cell.Text = "资信要求";
98
cell.ColumnSpan = 4;
99
cell.HorizontalAlign = HorizontalAlign.Center;
100
cell.RenderControl(writer);
101![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
102
//添加一行
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);
111![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
112
//添加合并的第二行第二列
113
cell = null;
114
cell = new TableCell();
115
cell.ColumnSpan = 2;
116
cell.Text = "问:售后";
117
cell.HorizontalAlign = HorizontalAlign.Center;
118
cell.RenderControl(writer);
119![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
120
writer.RenderEndTag();//</tr>
121![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
122
}
123![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
124
private void Button1_Click(object sender, System.EventArgs e)
125![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
126
foreach(DataGridItem item in grdMytest.Items)
127![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
128
TextBox txtPoint = (TextBox)item.FindControl("AnserOnePoint");
129
Response.Write(txtPoint.Text.Trim()+"<br>");
130
}
131
}
132
}
133
}
其实这种动态生成的页面,最大的难点还是在生成的算法上。明天好好想想。