前面例子的实战版本

it2022-05-09  26

.aspx.cs   1using System;  2using System.Collections;  3using System.ComponentModel;  4using System.Data;  5using System.Data.SqlClient;  6using System.Drawing;  7using System.Web;  8using System.Web.SessionState;  9using System.Web.UI; 10using System.Web.UI.WebControls; 11using System.Web.UI.HtmlControls; 12 13using Test1.ItemplateTest; 14 15namespace 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 99100        /**//// <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();110111            DataColumn columProvID = new DataColumn();112            columProvID.ColumnName = "ProvID";113            myTable.Columns.Add(columProvID);//添加供应商ID列114115            DataColumn columProvName = new DataColumn();116            columProvName.ColumnName = "ProvName";117            myTable.Columns.Add(columProvName);//添加供应商名称列118119            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        }130131132        /**//// <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        }147148149        /**//// <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        }177178        /**//// <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        }195196197        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);217218        }219        #endregion220221        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        }329330331        /**//// <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        }346347348        /**//// <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} 这里面还有许多需要重构的,没有时间做了,项目太紧。

转载于:https://www.cnblogs.com/nanshouyong326/archive/2006/12/27/605046.html


最新回复(0)