您的位置:首页 > 其它

GridView当数据源为空时如何实现显示表头

2007-04-02 22:18 459 查看
GridView当数据源为空时如何实现显示表头

解决:

方法一:采用其EmptyTemplate来实现,模版中写一个静态的table;
缺点: 麻烦,每个GridVIew都需要设置一下.

方法二: 若数据源为DataTable,则当无数据时,始终返回一个空行的DataTable;
若数据源是集合类(ArrayList,List<T>等),无数据时,生成一个空的实体,加入到集合类中.
缺点: 还是麻烦.

方法三:
也是要给大家介绍的方法: 扩展GridView来实现.继承GridVie,重写Render方法,当其数据源为空时做一下处理,直接看代码吧:

/// <summary>
/// GridView 扩展控件
/// @author:jianyi0115@163.com
/// </summary>
public class GridView : System.Web.UI.WebControls.GridView
{
private bool _enableEmptyContentRender = true ;
/// <summary>
/// 是否数据为空时显示标题行
/// </summary>
public bool EnableEmptyContentRender
{
set { _enableEmptyContentRender = value; }
get { return _enableEmptyContentRender; }
}

private string _EmptyDataCellCssClass ;
/// <summary>
/// 为空时信息单元格样式类
/// </summary>
public string EmptyDataCellCssClass
{
set { _EmptyDataCellCssClass = value ; }
get { return _EmptyDataCellCssClass ; }
}

/// <summary>
/// 为空时输出内容
/// </summary>
/// <param name="writer"></param>
protected virtual void RenderEmptyContent(HtmlTextWriter writer)
{
Table t = new Table(); //create a table
t.CssClass = this.CssClass; //copy all property
t.GridLines = this.GridLines;
t.BorderStyle = this.BorderStyle;
t.BorderWidth = this.BorderWidth;
t.CellPadding = this.CellPadding;
t.CellSpacing = this.CellSpacing;

t.HorizontalAlign = this.HorizontalAlign;

t.Width = this.Width;

t.CopyBaseAttributes(this);

TableRow row = new TableRow();
t.Rows.Add(row);

foreach (DataControlField f in this.Columns) //generate table header
{
TableCell cell = new TableCell();

cell.Text = f.HeaderText;

cell.CssClass = "TdHeaderStyle1";

row.Cells.Add(cell);
}

TableRow row2 = new TableRow();
t.Rows.Add(row2);

TableCell msgCell = new TableCell();
msgCell.CssClass = this._EmptyDataCellCssClass;

if (this.EmptyDataTemplate != null) //the second row, use the template
{
this.EmptyDataTemplate.InstantiateIn(msgCell);
}
else //the second row, use the EmptyDataText
{
msgCell.Text = this.EmptyDataText;
}

msgCell.HorizontalAlign = HorizontalAlign.Center;
msgCell.ColumnSpan = this.Columns.Count;

row2.Cells.Add(msgCell);

t.RenderControl(writer);
}

protected override void Render(HtmlTextWriter writer)
{
if ( _enableEmptyContentRender && ( this.Rows.Count == 0 || this.Rows[0].RowType == DataControlRowType.EmptyDataRow) )
{
RenderEmptyContent(writer);
}
else
{
base.Render(writer);
}
}

}
}

另解1:

DataTable dt_Test = new DataTable();

dt_Test = obj.GetList();

if(dt_Test.Rows.Count == 0)

{

dt_Test.Rows.Add(dt.NewRow());

gv_Test. DataSource = dt_Test;

gv_Test.DataBind();

int columnCount = dt_Test.Rows[0].Cells.Count;

gv_Test.Rows[0].Cells.Clear();

gv_Test.Rows[0].Cells.Add(new TableCell());

gv_Test.Rows[0].Cells[0].ColumnSpan = columnCount;

gv_Test.Rows[0].Cells[0].Text = "没有记录";

gv_Test.Rows[0].Cells[0].Style.Add("text-align","center");
}

else

{

gv_Test. DataSource = dt_Test;

gv_Test.DataBind();

}

另解2:

private void ShowNullTable(GridView grd)
{
if (grd.Rows.Count > 0) return; //有数据,不要处理
if (grd.DataSource != null)
{
if (((DataTable)grd.DataSource).Rows.Count > 0)
{
return;
}
}
GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
foreach (DataControlField field in grd.Columns)
{
TableCell cell = new TableCell();
cell.Text = field.HeaderText;
cell.Width = field.HeaderStyle.Width;
cell.Height = field.HeaderStyle.Height;
cell.ForeColor = field.HeaderStyle.ForeColor;
cell.Font.Size = field.HeaderStyle.Font.Size;
cell.Font.Bold = field.HeaderStyle.Font.Bold;
cell.Font.Name = field.HeaderStyle.Font.Name;
cell.Font.Strikeout = field.HeaderStyle.Font.Strikeout;
cell.Font.Underline = field.HeaderStyle.Font.Underline;
cell.BackColor = field.HeaderStyle.BackColor;
cell.VerticalAlign = field.HeaderStyle.VerticalAlign;
cell.HorizontalAlign = field.HeaderStyle.HorizontalAlign;
cell.CssClass = field.HeaderStyle.CssClass;
cell.BorderColor = field.HeaderStyle.BorderColor;
cell.BorderStyle = field.HeaderStyle.BorderStyle;
cell.BorderWidth = field.HeaderStyle.BorderWidth;
row.Cells.Add(cell);
}

TableItemStyle headStyle = grd.HeaderStyle;
TableItemStyle emptyStyle = grd.EmptyDataRowStyle;
emptyStyle.Width = headStyle.Width;
emptyStyle.Height = headStyle.Height;
emptyStyle.ForeColor = headStyle.ForeColor;
emptyStyle.Font.Size = headStyle.Font.Size;
emptyStyle.Font.Bold = headStyle.Font.Bold;
emptyStyle.Font.Name = headStyle.Font.Name;
emptyStyle.Font.Strikeout = headStyle.Font.Strikeout;
emptyStyle.Font.Underline = headStyle.Font.Underline;
emptyStyle.BackColor = headStyle.BackColor;
emptyStyle.VerticalAlign = headStyle.VerticalAlign;
emptyStyle.HorizontalAlign = headStyle.HorizontalAlign;
emptyStyle.CssClass = headStyle.CssClass;
emptyStyle.BorderColor = headStyle.BorderColor;
emptyStyle.BorderStyle = headStyle.BorderStyle;
emptyStyle.BorderWidth = headStyle.BorderWidth;
if (grd.Controls.Count == 0)
{
grd.Page.Response.Write("<script language='javascript'>alert('必须在初始化表格类之前执行DataBind方法并设置EmptyDataText属性不为空!');</script>");
}
else
{
grd.Controls[0].Controls.Clear(); //删除没数据时的提示
grd.Controls[0].Controls.AddAt(0, row);
GridViewRow newRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal);
newRow.Cells.Add(new TableCell());
newRow.Cells[0].ColumnSpan = Columns.Count;
newRow.Cells[0].HorizontalAlign = HorizontalAlign.Center;
newRow.Cells[0].Text = EmptyDataText;
grd.Controls[0].Controls.Add(newRow);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: