在有些开发实践中,有时候为了页面美观的需要,需要将GridView填充成固定行数的表格,下面这个方法实现了这种填充的功能。此方法可以处理自动产生列和模版列。注意:由于时间关系,没有实现对完全空白数据的填充,呵呵,如果需要,可以自己添加哈:)!
C#:
<% @ Page Language = " C# " %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > < script runat ="server" > // 计算数据,完全可以从数据看取得 ICollection CreateDataSourceByXianhuiMeng() { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataRow dr; dt.Columns.Add( new System.Data.DataColumn( " 学生班级 " , typeof (System.String))); dt.Columns.Add( new System.Data.DataColumn( " 学生姓名 " , typeof (System.String))); dt.Columns.Add( new System.Data.DataColumn( " 语文 " , typeof (System.Decimal))); dt.Columns.Add( new System.Data.DataColumn( " 数学 " , typeof (System.Decimal))); dt.Columns.Add( new System.Data.DataColumn( " 英语 " , typeof (System.Decimal))); dt.Columns.Add( new System.Data.DataColumn( " 计算机 " , typeof (System.Decimal))); for ( int i = 0 ; i < 8 ; i ++ ) { System.Random rd = new System.Random(Environment.TickCount * i); ; dr = dt.NewRow(); dr[ 0 ] = " 班级 " + i.ToString(); dr[ 1 ] = " 【孟子E章】 " + i.ToString(); dr[ 2 ] = System.Math.Round(rd.NextDouble() * 100 , 2 ); dr[ 3 ] = System.Math.Round(rd.NextDouble() * 100 , 2 ); dr[ 4 ] = System.Math.Round(rd.NextDouble() * 100 , 2 ); dr[ 5 ] = System.Math.Round(rd.NextDouble() * 100 , 2 ); dt.Rows.Add(dr); } System.Data.DataView dv = new System.Data.DataView(dt); return dv; } // 设置每页显示的行数 int TotalRowCount = 12 ; // 自动填充的行数 int numCount = 0 ; protected void Page_Load(object sender, EventArgs e) { if ( ! Page.IsPostBack) { GridView1.DataSource = CreateDataSourceByXianhuiMeng(); GridView1.DataBind(); } } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { // 计算自动填充的行数 numCount ++ ; } if (e.Row.RowType == DataControlRowType.Footer) { // 计算完毕,在此添加缺少的行 int toLeft = TotalRowCount - numCount; int numCols = GridView1.Rows[ 0 ].Cells.Count; for ( int i = 0 ; i < toLeft; i ++ ) { GridViewRow row = new GridViewRow( - 1 , - 1 , DataControlRowType.EmptyDataRow, DataControlRowState.Normal); for ( int j = 0 ; j < numCols; j ++ ) { TableCell cell = new TableCell(); cell.Text = " " ; row.Cells.Add(cell); } GridView1.Controls[ 0 ].Controls.AddAt(numCount + 1 + i, row); } } } </ script > < html xmlns ="http://www.w3.org/1999/xhtml" > < head runat ="server" > < title > 自动填充固定行数的 GridView </ title > </ head > < body > < form id ="form1" runat ="server" > < asp:GridView ID ="GridView1" runat ="server" OnRowDataBound ="GridView1_RowDataBound" Font-Size ="12px" CellPadding ="3" > < HeaderStyle BackColor ="#EDEDED" /> < Columns > < asp:TemplateField HeaderText ="模版列" > < ItemTemplate > <% # Eval ( " 学生姓名 " ) %> </ ItemTemplate > </ asp:TemplateField > </ Columns > </ asp:GridView > </ form > </ body > </ html >