前面例子的实战版本
1
using System;2
using System.Collections;3
using System.ComponentModel;4
using System.Data;5
using System.Data.SqlClient;6
using System.Drawing;7
using System.Web;8
using System.Web.SessionState;9
using System.Web.UI;10
using System.Web.UI.WebControls;11
using System.Web.UI.HtmlControls;12

13
using Test1.ItemplateTest;14

15
namespace Test116


{17

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

{22
protected System.Web.UI.WebControls.Button Button1;23
protected System.Web.UI.WebControls.DataGrid grdTextAnserScore;24
25
private void Page_Load(object sender, System.EventArgs e)26

{27
DataSet demand = getData();//得到数据源28

29
//为Datagrid添加列30
addColumsForDataGrid(grdTextAnserScore,demand);31
//创建虚拟数据表,用做数据源32
DataTable dt = createDataTable(demand);33
//得到包下所有供应商信息34
DataTable dtProv = getProvsInPack("bfee693b-25c0-4080-8edb-ece782f09ad8");35
//为虚拟表添加数据36
DataTable dtFilled = FillDataTable(dtProv,dt,demand);37
//绑定DataGrid38
grdTextAnserScore.DataSource = dtFilled;39
grdTextAnserScore.DataBind();40
}41

42

/**//// <summary>43
/// 描述:得到分类、要求信息44
/// 作者:南守拥45
/// 时间:2006年12月26日46
/// </summary>47
/// <returns></returns>48
private DataSet getData()49

{50
//DataGrid表头51
//包下有那些供应商52
SqlConnection con = new SqlConnection("Persist Security Info=false;Data Source=192.168.0.9;Initial Catalog=TjgpE;User ID=sa;Password=;");53
SqlDataAdapter da = new SqlDataAdapter("",con);54
//包文本应答项55
//要求分类信息56
da.SelectCommand.CommandText = "select distinct PK_DemandKindID,DemandKindName from V_StockItem_StockPack_Demand_BidValue_Resp where FK_StockPackID = 'bfee693b-25c0-4080-8edb-ece782f09ad8'and FK_ResponseID = '0'";57
DataSet demand = new DataSet();58
da.Fill(demand,"Kind");59
//要求信息60
da.SelectCommand.CommandText = "select distinct PK_DemandKindID,DemandName,PK_StockPack_DemandID,FK_DemandInfoID from V_StockItem_StockPack_Demand_BidValue_Resp where FK_StockPackID = 'bfee693b-25c0-4080-8edb-ece782f09ad8' and FK_ResponseID = '0'";61
da.Fill(demand,"Info");62
//加要求分类与要求关系63
demand.Relations.Add("KindAndInfo",demand.Tables["Kind"].Columns["PK_DemandKindID"],demand.Tables["Info"].Columns["PK_DemandKindID"]); 64
65
return demand;66
}67

68

69

/**//// <summary>70
/// 描述:为DataGrid添加列71
/// 作者:南守拥72
/// 时间:2006年12月16日73
/// </summary>74
/// <param name="myGrid">要添加列的DataGrid</param>75
/// <param name="demand">数据源</param>76
private void addColumsForDataGrid(DataGrid myGrid,DataSet demand)77

{78
foreach(DataRow rowKind in demand.Tables["Kind"].Rows)//分类79

{80
foreach(DataRow rowInfo in rowKind.GetChildRows("KindAndInfo")) //要求81

{82
//Datagrid添加应答列83
TemplateColumn tc1 = new TemplateColumn();84
string columName = "Anser" + rowInfo["DemandName"].ToString();85
tc1.ItemTemplate = new CTemplateColLabel(columName);86
tc1.ItemStyle.Wrap = false;87
grdTextAnserScore.Columns.Add(tc1);88
//Datagrid添加打分列89
TemplateColumn tc2 = new TemplateColumn();90
string columNamePoint = "Point" + rowInfo["DemandName"].ToString();91
tc2.ItemTemplate = new CTemplateCol(columNamePoint);92
tc2.ItemStyle.Wrap = false;93
grdTextAnserScore.Columns.Add(tc2);94

95
}96
}97
}98

99

100

/**//// <summary>101
/// 描述:创建虚拟表102
/// 作者:南守拥103
/// 时间:2006年12月26日104
/// </summary>105
/// <param name="demand">数据源</param>106
/// <returns>虚拟DataTable</returns>107
private DataTable createDataTable(DataSet demand)108

{109
DataTable myTable = new DataTable();110

111
DataColumn columProvID = new DataColumn();112
columProvID.ColumnName = "ProvID";113
myTable.Columns.Add(columProvID);//添加供应商ID列114

115
DataColumn columProvName = new DataColumn();116
columProvName.ColumnName = "ProvName";117
myTable.Columns.Add(columProvName);//添加供应商名称列118

119
foreach(DataRow rowKind in demand.Tables["Kind"].Rows)//分类120

{121
foreach(DataRow rowInfo in rowKind.GetChildRows("KindAndInfo")) //要求122

{123
DataColumn colum = new DataColumn();124
colum.ColumnName = "Anser" + rowInfo["DemandName"].ToString();125
myTable.Columns.Add(colum);126
}127
} 128
return myTable;129
}130

131

132

/**//// <summary>133
/// 描述:得到包下的所有供应商134
/// 作者:南守拥135
/// 时间:2006年12月26日136
/// </summary>137
/// <param name="packid">包ID</param>138
/// <returns></returns>139
private DataTable getProvsInPack(string packid)140

{141
SqlConnection con = new SqlConnection("Persist Security Info=false;Data Source=192.168.0.9;Initial Catalog=TjgpE;User ID=sa;Password=;");142
SqlDataAdapter da = new SqlDataAdapter("select distinct Txt_ProvID,txt_name_ch from V_StockItem_StockPack_Demand_BidValue_Resp where FK_StockPackID = 'bfee693b-25c0-4080-8edb-ece782f09ad8' and FK_ResponseID = '0'",con);143
DataTable dt = new DataTable();144
da.Fill(dt);145
return dt;146
}147

148

149

/**//// <summary>150
/// 描述:为虚拟表添加数据151
/// 作者:南守拥152
/// 时间:2006年12月26日153
/// </summary>154
/// <param name="provs"></param>155
/// <param name="myTable"></param>156
/// <returns></returns>157
private DataTable FillDataTable(DataTable provs,DataTable myTable,DataSet source)158

{159
foreach(DataRow row in provs.Rows)160

{161
DataRow newRow = myTable.NewRow();//创建新行162
//添加供应商ID163
newRow["ProvID"] = row["Txt_ProvID"];164
//添加供应商名称165
newRow["ProvName"] = row["txt_name_ch"];166
foreach(DataRow rowKind in source.Tables["Kind"].Rows)//分类167

{168
foreach(DataRow rowInfo in rowKind.GetChildRows("KindAndInfo")) //要求169

{170
newRow["Anser" + rowInfo["DemandName"].ToString()] = GetResponseInfo("bfee693b-25c0-4080-8edb-ece782f09ad8",row["Txt_ProvID"].ToString(),rowInfo["FK_DemandInfoID"].ToString());171
}172
}173
myTable.Rows.Add(newRow);174
}175
return myTable;176
}177

178

/**//// <summary>179
/// 描述:查询包下特定供应商的特定要求的应答内容180
/// 作者:南守拥181
/// 时间:2006年12月26日182
/// </summary>183
/// <param name="packid">包ID</param>184
/// <param name="provid">供应商ID</param>185
/// <param name="demandid">要求ID</param>186
/// <returns></returns>187
private string GetResponseInfo(string packid,string provid,string demandid)188

{189
SqlConnection con = new SqlConnection("Persist Security Info=false;Data Source=192.168.0.9;Initial Catalog=TjgpE;User ID=sa;Password=;");190
SqlDataAdapter da = new SqlDataAdapter("select distinct ResponseContent from V_StockItem_StockPack_Demand_BidValue_Resp where FK_StockPackID='"+packid+"'and FK_ResponseID='0'and Txt_ProvID='"+provid+"'and FK_DemandInfoID='"+demandid+"'",con);191
DataTable dt = new DataTable();192
da.Fill(dt);193
return dt.Rows[0][0].ToString();194
}195

196

197

Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码198
override protected void OnInit(EventArgs e)199

{200
//201
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。202
//203
InitializeComponent();204
base.OnInit(e);205
}206
207

/**//// <summary>208
/// 设计器支持所需的方法 - 不要使用代码编辑器修改209
/// 此方法的内容。210
/// </summary>211
private void InitializeComponent()212

{ 213
this.grdTextAnserScore.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.grdTextAnserScore_ItemCreated);214
this.grdTextAnserScore.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.grdTextAnserScore_ItemDataBound);215
this.Button1.Click += new System.EventHandler(this.Button1_Click);216
this.Load += new System.EventHandler(this.Page_Load);217

218
}219
#endregion220

221
private void grdTextAnserScore_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)222

{223
if(e.Item.ItemType == ListItemType.Header)224

{225
e.Item.SetRenderMethodDelegate(new RenderMethod(NewRenderMothodItem));//输出流重定向(按项目)226
}227
}228

/**//// <summary>229
/// 描述:自定义表头输出230
/// 作者:南守拥231
/// 时间:2006年12月27日232
/// </summary>233
/// <param name="writer"></param>234
/// <param name="ctl"></param>235
private void NewRenderMothodItem(HtmlTextWriter writer,Control ctl)236

{237
//输出供应商ID238
writer.AddAttribute(HtmlTextWriterAttribute.Rowspan,"2");239
writer.AddAttribute(HtmlTextWriterAttribute.Class,"locked");240
writer.AddAttribute(HtmlTextWriterAttribute.Wrap,"false");241
writer.RenderBeginTag(HtmlTextWriterTag.Th);242
Label lbl0 = new Label();243
lbl0.Text = "供应商ID";244
lbl0.RenderControl(writer);245
writer.RenderEndTag();246
//输出供应商名称247
writer.AddAttribute(HtmlTextWriterAttribute.Rowspan,"2");248
writer.AddAttribute(HtmlTextWriterAttribute.Class,"locked");249
writer.AddAttribute(HtmlTextWriterAttribute.Wrap,"false");250
writer.RenderBeginTag(HtmlTextWriterTag.Th);251
Label lbl1 = new Label();252
lbl1.Text = "供应商名称";253
lbl1.RenderControl(writer);254
writer.RenderEndTag();255
//输出表头的第一行(分类名称部分)256
DataSet demand = getData();257
RenderTitleFirstRow(writer,demand);//输出第一行258
//强制结束换行259
writer.Write("</tr>");260
//输出表头的第二行(要求名称部分)261
RenderTitleSecondRow(writer,demand);//输出第二行 262
}263

/**//// <summary>264
/// 描述:输出表头的第一行265
/// 作者:南守拥266
/// 时间:2006年12月27日267
/// </summary>268
/// <param name="demand">分类其要求</param>269
private void RenderTitleFirstRow(HtmlTextWriter writer, DataSet demand)270

{271
foreach(DataRow rowKind in demand.Tables["Kind"].Rows) //循环所有的分类272

{273
int colspan = GetCagegoryColspan(rowKind); //得到其Colspan属性值274
writer.AddAttribute(HtmlTextWriterAttribute.Colspan,colspan.ToString());//添加相应的Colspan属性 275
writer.RenderBeginTag(HtmlTextWriterTag.Th);//输出表头单元格标记<th>276
Label lbl = new Label();277
lbl.Text = rowKind["DemandKindName"].ToString();//分类名称278
lbl.RenderControl(writer);//输出279
writer.RenderEndTag();//输出表头单元格结束标记</th>280
}281
}282

/**//// <summary>283
/// 描述:得到特定分类的Colspan284
/// 作者:南守拥285
/// 时间:2006年12月27日286
/// </summary>287
/// <param name="row">分类行</param>288
/// <returns>特定分类的Colspan值</returns>289
private int GetCagegoryColspan(DataRow row)290

{291
int demaindCount = 0;292
for(int i = 0;i< row.GetChildRows("KindAndInfo").Length;i++) //循环要求个数293

{294
demaindCount ++;295
}296
if(demaindCount == 0)297

{298
return 1;299
}300
return demaindCount*2;//因为表头的第二行有固定的Colspan数2(应答内容列、打分列)301
}302

/**//// <summary>303
/// 描述:输出表头的第二行304
/// 作者:南守拥305
/// 时间:2006年12月27日306
/// </summary>307
/// <param name="writer">Html流</param>308
/// <param name="demand">分类和要求</param>309
private void RenderTitleSecondRow(HtmlTextWriter writer,DataSet demand)310

{311
//添加行<tr>312
writer.RenderBeginTag(HtmlTextWriterTag.Tr);313
//输出表头第二行314
foreach(DataRow rowKind in demand.Tables["Kind"].Rows)//分类315

{316
foreach(DataRow rowInfo in rowKind.GetChildRows("KindAndInfo"))//要求317

{318
writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2");//固定的跨二列(应答内容列、打分列)319
writer.RenderBeginTag(HtmlTextWriterTag.Th);//表头单元格<th>320
Label lbl = new Label();321
lbl.Text = rowInfo["DemandName"].ToString();//名称322
lbl.RenderControl(writer);323
writer.RenderEndTag();//表头单元格结束</th>324
}325
}326
//结束添加的行</tr>327
writer.RenderEndTag();328
}329

330

331

/**//// <summary>332
/// 描述:打分表的行数据绑定事件333
/// 作者:南守拥334
/// 时间:2006年12月27日335
/// </summary>336
/// <param name="sender"></param>337
/// <param name="e"></param>338
private void grdTextAnserScore_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)339

{340
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)341

{342
e.Item.Cells[0].CssClass = "locked";//让第一列固定343
e.Item.Cells[1].CssClass = "locked";//让第二列固定344
}345
}346

347

348

/**//// <summary>349
/// 事件测试,读打分值350
/// </summary>351
/// <param name="sender"></param>352
/// <param name="e"></param>353
private void Button1_Click(object sender, System.EventArgs e)354

{355
foreach(DataGridItem item in grdTextAnserScore.Items)356

{357
TextBox txt = (TextBox)item.FindControl("Point资信要求3");358
if(txt != null)359

{360
Response.Write(txt.Text.Trim());361
}362
}363
}364
}365
}

浙公网安备 33010602011771号