我想显示一个网格视图'标题,即使绑定到网格的数据源为空?如果没有添加BLANK行,有没有办法实现相同的目标?
答案 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
。