DataGrid动态添加模板列并合并头
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
GO1
using System;2
using System.Web.UI;3
using System.Web.UI.WebControls;4
using System.Data;5

6
namespace Test1.ItemplateTest7


{8
public class CTemplateCol:ITemplate9

{10
private string colname;11
TextBox l;12
public CTemplateCol(string cname)13

{14
colname=cname;15
}16

17
//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
}36

37
}38

1
using System;2
using System.Web.UI;3
using System.Web.UI.WebControls;4
using System.Data;5

6
namespace Test1.ItemplateTest7


{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
}19

20
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
}28

29
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

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

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

12
using System.Data.SqlClient;13
using Test1.ItemplateTest;14

15
namespace Test116


{17

/**//// <summary>18
/// WebForm1 的摘要说明。19
/// </summary>20
public class WebForm1 : System.Web.UI.Page21

{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
#endregion78

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);101

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

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

120
writer.RenderEndTag();//</tr>121

122
}123

124
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
}其实这种动态生成的页面,最大的难点还是在生成的算法上。明天好好想想。

浙公网安备 33010602011771号