представление сетки asp.net показывает заголовок, если нет данных - PullRequest
1 голос
/ 23 ноября 2010

я хочу показать заголовок вида сетки, даже если источник данных, связанный с сеткой, пуст?Есть ли способ добиться того же, не добавляя пустую строку?

Ответы [ 2 ]

0 голосов
/ 20 августа 2013

Начиная с ASP.NET 4, вы можете установить свойство ShowHeaderWhenEmpty GridView равным true.

0 голосов
/ 26 ноября 2010

Самый простой способ - создать собственный 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 какие-либо строки, а если нет, то вы создаете строку верхнего и нижнего колонтитула (если они включены).

EDIT:

Кроме того, если вы хотите показать свой EmptyDataText, вы можете добавить эти строки между созданием верхнего и нижнего колонтитула.

GridViewRow emptyRow;

if (this.EmptyDataTemplate != null)
{
     emptyRow = this.Controls[0].Controls[0] as GridViewRow;
}
table.Rows.Add(emptyRow);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...