如果没有数据,网格视图asp.net显示标题

时间:2010-11-23 13:41:29

标签: gridview header datasource show

我想显示一个网格视图'标题,即使绑定到网格的数据源为空?如果没有添加BLANK行,有没有办法实现相同的目标?

3 个答案:

答案 0 :(得分:1)

另一个选项是将 GridView 的 ShowHeaderWhenEmpty 属性设置为 true。请注意,这适用于 .Net Framework 4.0 及更高版本。 docs.microsoft.com

答案 1 :(得分:0)

最简单的方法是创建自己继承自GridView类的GridView。然后覆盖CreateChildControls方法以创建新的空表。

这样的事情应该有效:

protected GridViewRow _footerRow2;
protected GridViewRow _headerRow2;

protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
{
    // Call base method and get number of rows
    int numRows = base.CreateChildControls(dataSource, dataBinding);

    if (numRows == 0)
    {
        //no data rows created, create empty table
        //create table
        Table table = new Table();
        table.ID = this.ID;

        //convert the exisiting columns into an array and initialize
        DataControlField[] fields = new DataControlField[this.Columns.Count];
        this.Columns.CopyTo(fields, 0);

        if (this.ShowHeader)
        {
            //create a new header row
            _headerRow2 = base.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);

            this.InitializeRow(_headerRow2, fields);
            _headerRow2.EnableTheming = true;
            table.Rows.Add(_headerRow2);
        }

        if (this.ShowFooter)
        {
            //create footer row
            _footerRow2 = base.CreateRow(-1, -1, DataControlRowType.Footer, DataControlRowState.Normal);

            this.InitializeRow(_footerRow2, fields);
            _footerRow2.EnableTheming = true;
            table.Rows.Add(_footerRow2);
        }

        this.Controls.Clear();
        this.Controls.Add(table);
    }

    return numRows;
}

基本上,你检查GridView是否有任何行,如果没有,那么你创建标题行和页脚行(如果它们被启用)。

修改

此外,如果您仍希望显示EmptyDataText,可以在创建页眉和页脚之间添加这些行。

GridViewRow emptyRow;

if (this.EmptyDataTemplate != null)
{
     emptyRow = this.Controls[0].Controls[0] as GridViewRow;
}
table.Rows.Add(emptyRow);

答案 2 :(得分:0)

从ASP.NET 4开始,您可以将GridView的ShowHeaderWhenEmpty属性设置为true