
.aspx.cs
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 Test1
16

{
17
/**//// <summary>
18
/// ScoreTable 的摘要说明。
19
/// </summary>
20
public class ScoreTable : System.Web.UI.Page
21
{
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
//绑定DataGrid
38
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
//添加供应商ID
163
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
#endregion
220
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
//输出供应商ID
238
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
/// 描述:得到特定分类的Colspan
284
/// 作者:南守拥
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
}
这里面还有许多需要重构的,没有时间做了,项目太紧。