|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
|
问题:asp.net 2.0 中引入的GridView控件当其数据源为空时(GridView.DataSource=null)不能显示出表头. JVfLinux联盟 解决: JVfLinux联盟 方法一:采用其EmptyTemplate来实现,模版中写一个静态的table; JVfLinux联盟 如果你的表头只是html的文本,没有任何控件。你可以在表头显示出来的时候,拷贝表头部分的html,然后放到EmptyDataTemplate里面。 JVfLinux联盟 缺点: 麻烦,每个GridVIew都需要设置一下. JVfLinux联盟 方法二: 若数据源为DataTable,则当无数据时,始终返回一个空行的DataTable; JVfLinux联盟 若数据源是集合类(ArrayList,List<T>等),无数据时,生成一个空的实体,加入到集合类中. JVfLinux联盟 缺点: 还是麻烦. JVfLinux联盟 方法三: JVfLinux联盟 也是要给大家介绍的方法: 扩展GridView来实现.继承GridVie,重写Render方法,当其数据源为空时做一下处理,直接看代码吧: JVfLinux联盟 JVfLinux联盟 /// <summary> JVfLinux联盟 /// GridView 扩展控件 JVfLinux联盟 /// @author:jianyi0115@163.com JVfLinux联盟 /// </summary> JVfLinux联盟 public class GridView : System.Web.UI.WebControls.GridView JVfLinux联盟 { JVfLinux联盟 private bool _enableEmptyContentRender = true ; JVfLinux联盟 /// <summary> JVfLinux联盟 /// 是否数据为空时显示标题行 JVfLinux联盟 /// </summary> JVfLinux联盟 public bool EnableEmptyContentRender JVfLinux联盟 { JVfLinux联盟 set { _enableEmptyContentRender = value; } JVfLinux联盟 get { return _enableEmptyContentRender; } JVfLinux联盟 } JVfLinux联盟 JVfLinux联盟 private string _EmptyDataCellCssClass ; JVfLinux联盟 /// <summary> JVfLinux联盟 /// 为空时信息单元格样式类 JVfLinux联盟 /// </summary> JVfLinux联盟 public string EmptyDataCellCssClass JVfLinux联盟 { JVfLinux联盟 set { _EmptyDataCellCssClass = value ; } JVfLinux联盟 get { return _EmptyDataCellCssClass ; } JVfLinux联盟 } JVfLinux联盟 JVfLinux联盟 /// <summary> JVfLinux联盟 /// 为空时输出内容 JVfLinux联盟 /// </summary> JVfLinux联盟 /// <param name="writer"></param> JVfLinux联盟 protected virtual void RenderEmptyContent(HtmlTextWriter writer) JVfLinux联盟 { JVfLinux联盟 Table t = new Table(); //create a table JVfLinux联盟 t.CssClass = this.CssClass; //copy all property JVfLinux联盟 t.GridLines = this.GridLines; JVfLinux联盟 t.BorderStyle = this.BorderStyle; JVfLinux联盟 t.BorderWidth = this.BorderWidth; JVfLinux联盟 t.CellPadding = this.CellPadding; JVfLinux联盟 t.CellSpacing = this.CellSpacing; JVfLinux联盟 JVfLinux联盟 t.HorizontalAlign = this.HorizontalAlign; JVfLinux联盟 JVfLinux联盟 t.Width = this.Width; JVfLinux联盟 JVfLinux联盟 t.CopyBaseAttributes(this); JVfLinux联盟 JVfLinux联盟 TableRow row = new TableRow(); JVfLinux联盟 t.Rows.Add(row); JVfLinux联盟 JVfLinux联盟 foreach (DataControlField f in this.Columns) //generate table header JVfLinux联盟 { JVfLinux联盟 TableCell cell = new TableCell(); JVfLinux联盟 JVfLinux联盟 cell.Text = f.HeaderText; JVfLinux联盟 JVfLinux联盟 cell.CssClass = "TdHeaderStyle1"; //这里把表头样式写死了 JVfLinux联盟 JVfLinux联盟 row.Cells.Add(cell); JVfLinux联盟 } JVfLinux联盟 JVfLinux联盟 TableRow row2 = new TableRow(); JVfLinux联盟 t.Rows.Add(row2); JVfLinux联盟 JVfLinux联盟 TableCell msgCell = new TableCell(); JVfLinux联盟 msgCell.CssClass = this._EmptyDataCellCssClass; JVfLinux联盟 JVfLinux联盟 if (this.EmptyDataTemplate != null) //the second row, use the template JVfLinux联盟 { JVfLinux联盟 this.EmptyDataTemplate.InstantiateIn(msgCell); JVfLinux联盟 } JVfLinux联盟 else //the second row, use the EmptyDataText JVfLinux联盟 { JVfLinux联盟 msgCell.Text = this.EmptyDataText; JVfLinux联盟 } JVfLinux联盟 JVfLinux联盟 msgCell.HorizontalAlign = HorizontalAlign.Center; JVfLinux联盟 msgCell.ColumnSpan = this.Columns.Count; JVfLinux联盟 JVfLinux联盟 row2.Cells.Add(msgCell); JVfLinux联盟 JVfLinux联盟 t.RenderControl(writer); JVfLinux联盟 } JVfLinux联盟 JVfLinux联盟 protected override void Render(HtmlTextWriter writer) JVfLinux联盟 { JVfLinux联盟 if ( _enableEmptyContentRender && ( this.Rows.Count == 0 || this.Rows[0].RowType == DataControlRowType.EmptyDataRow) ) JVfLinux联盟 { JVfLinux联盟 RenderEmptyContent(writer); JVfLinux联盟 } JVfLinux联盟 else JVfLinux联盟 { JVfLinux联盟 base.Render(writer); JVfLinux联盟 } JVfLinux联盟 } JVfLinux联盟 JVfLinux联盟 } JVfLinux联盟 }
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|
|
|
|
|