热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> .Net编程>>正文内容

如何显示空的GridView控件?

发布时间:2010年03月09日点击数: 佚名

当GridView中没有数据要显示时,默认情况控件将不被显示。如果你想即便在没有数据时也显示标题行,你可以创建一个临时的包含空记录的DataTable对象,接着在页面的Init事件中绑定该GridView控件到这个DataTable。下例说明了如何去做。

  1. protected void GridView1_Init(Object sender, EventArgs e) 
  2.     DataTable dt = new DataTable(); 
  3.     dt.Columns.Add("Column1"); 
  4.     dt.Columns.Add("Column2"); 
  5.     DataRow dr = dt.NewRow(); 
  6.     dr["Column1"] = ""
  7.     dr["Column2"] = ""
  8.     dt.Rows.Add(dr); 
  9.     GridView1.DataSource = dt; 
  10.     GridView1.DataBind(); 
  11.   } 

另一种解决方法是从GridView继承并重写CreateChildControls方法,该方法能自动利用现有列布局,并移除使用外在DataTable对象的需求。下例说明了如何去做

  1. public class EmptyGridView : GridView 
  2.     #region Properties 
  3.     /// <summary> 
  4.     /// Enable or Disable generating an empty table if no data rows in source 
  5.     /// </summary> 
  6.     [ 
  7.     Description("Enable or disable generating an empty table with headers 
  8.          when no data rows are available in the data source."), 
  9.     Category("Misc"), 
  10.     DefaultValue("true"), 
  11.     ] 
  12.     public bool ShowEmptyTable 
  13.     { 
  14.         get 
  15.         { 
  16.             object o = ViewState["ShowEmptyTable"]; 
  17.             return (o != null ? (bool)o : true); 
  18.         } 
  19.         set 
  20.         { 
  21.             ViewState["ShowEmptyTable"] = value; 
  22.         } 
  23.     } 
  24.     /// <summary> 
  25.     /// Get or Set Text to display in empty data row 
  26.     /// </summary> 
  27.     [ 
  28.     Description("Text to display in the empty data row."), 
  29.     Category("Misc"), 
  30.     DefaultValue(""), 
  31.     ] 
  32.     public string EmptyTableRowText 
  33.     { 
  34.         get 
  35.         { 
  36.             object o = ViewState["EmptyTableRowText"]; 
  37.             return (o != null ? o.ToString() : ""); 
  38.         } 
  39.         set 
  40.         { 
  41.             ViewState["EmptyTableRowText"] = value; 
  42.         } 
  43.     } 
  44.     #endregion 
  45.     protected override int CreateChildControls(System.Collections.IEnumerable 
  46.             dataSource, bool dataBinding) 
  47.     { 
  48.         int numRows = base.CreateChildControls(dataSource, dataBinding); 
  49.         // No data rows created, so create an empty table if enabled. 
  50.         if (numRows == 0 && ShowEmptyTable) 
  51.         { 
  52.             //create table 
  53.             Table table = new Table(); 
  54.             table.ID = this.ID; 
  55.             //create a new header row 
  56.             GridViewRow row = base.CreateRow(-1, -1, DataControlRowType.Header, 
  57.                 DataControlRowState.Normal); 
  58.             //convert the exisiting columns into an array and initialize 
  59.             DataControlField[] fields = new 
  60.                 DataControlField[this.Columns.Count]; 
  61.             this.Columns.CopyTo(fields, 0); 
  62.             this.InitializeRow(row, fields); 
  63.             table.Rows.Add(row); 
  64.             //create the empty row 
  65.             row = new GridViewRow(-1, -1, DataControlRowType.DataRow, 
  66.             DataControlRowState.Normal); 
  67.             TableCell cell = new TableCell(); 
  68.             cell.ColumnSpan = this.Columns.Count; 
  69.             cell.Width = Unit.Percentage(100); 
  70.             cell.Controls.Add(new LiteralControl(EmptyTableRowText)); 
  71.             row.Cells.Add(cell); 
  72.             table.Rows.Add(row); 
  73.             this.Controls.Add(table); 
  74.         } 
  75.         return numRows; 
  76.     } 
  77.   

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作