首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

重写gridview控件 当数据源为空时 如何显示footer行

2012-12-21 
重写gridview控件 当数据源为空时 怎么显示footer行重写了gridview控件 当数据源为空的时候 重写了表头 pr

重写gridview控件 当数据源为空时 怎么显示footer行
重写了gridview控件 当数据源为空的时候 重写了表头
 protected override void Render(HtmlTextWriter writer)
        {
            if (this.Rows.Count == 0 || this.Rows[0].RowType == DataControlRowType.EmptyDataRow)
            {
                RenderEmptyContent(writer);
            }
            else
            {
                base.Render(writer);
            }
        }
        protected virtual void RenderEmptyContent(HtmlTextWriter writer)
        {
            Table t = new Table();
            t.CssClass = this.CssClass;
            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)
            {
                TableHeaderCell cell = new TableHeaderCell();
                cell.Text = f.HeaderText;
                row.Cells.Add(cell);
            }
            t.RenderControl(writer);

        }
可是这样footer行显示不出来   有么有什么好的方法  不想采用插入空行再删除的方式 太麻烦 
谁能指导一下 谢谢
[最优解释]
那在循环里可以改成这样:


foreach (DataControlField f in this.Columns)
{
TableHeaderCell cell = new TableHeaderCell();
cell.Text = f.HeaderText;


headerRow.Cells.Add(cell);

var cell1 = new DataControlFieldCell(f);
cell1.Text = f.FooterText;
var template = f as TemplateField;
if (template != null && template.FooterTemplate != null)
template.FooterTemplate.InstantiateIn(cell1);
footerRow.Cells.Add(cell1);
}


[其他解释]
该回复于2012-11-21 14:05:35被管理员删除
[其他解释]
按照画表头的做法再处理一下footer不就好了吗?
protected virtual void RenderEmptyContent(HtmlTextWriter writer)
{
Table t = new Table();
t.CssClass = this.CssClass;
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 headerRow = new TableRow();
t.Rows.Add(headerRow);
TableRow footerRow = new TableRow();
t.Rows.Add(footerRow);

foreach (DataControlField f in this.Columns)
{
TableHeaderCell cell = new TableHeaderCell();
cell.Text = f.HeaderText;
headerRow.Cells.Add(cell);
cell = new TableHeaderCell();
cell.Text = f.FooterText;
footerRow.Cells.Add(cell);
}
t.RenderControl(writer);
}

[其他解释]
这样确实可以出现footer 但是footer中无法加载控件的 我的想法是不影响FooterTemplate模板的使用
[其他解释]
问题解决  非常感谢您的解答

热点排行