Отображение строки нижнего колонтитула в виде сетки - PullRequest
1 голос
/ 25 октября 2011

У меня есть веб-форма ASP.Net VS2010, которая содержит GridView. Этот GridView имеет ShowHeaderWhenEmpty = "True", поэтому заголовки сетки отображаются, когда источник данных сетки пуст.

Также. столбцы GridView являются полями TemplateFields. В первом столбце есть новая кнопка в шаблоне заголовка. Событие New кнопки Click выполняет GridView1.FooterRow.Visible = True, чтобы пользователь мог вставить строку в таблицу.

Проблема в том, что когда источник данных пуст и нажата новая кнопка, я получаю эту ошибку: «Ссылка на объект не установлена ​​на экземпляр объекта».

Если источник данных НЕ пуст и нажата новая кнопка, все работает нормально.

Как показать FooterRow GridView, когда источник данных пуст?


- Обновление - это решение, которое я придумал.

           private BindMyGrid()
           {
            bool isHideFirstRow = false;
            if (_myEntity.Count > 0)
            {
                MyGrid.DataSource = _myEntity;
                MyGrid.DataBind();
            }
            else
            {
                //Create an empty list and bind to that.
                isHideFirstRow = true;
                var list = new List<MyEntity> { new MyEntity { col1 = "", col2 = "", Col2 = "", IsEnabled = false } };
                MyGrid.DataSource = list;
                MyGrid.DataBind();
            }

            if (isHideFirstRow)
            {
                //Hide the first row if it's empty
                MyGrid.Rows[0].Visible = false;
            }
            }

1 Ответ

0 голосов
/ 28 октября 2011

вы можете сделать так ....

более элегантное решение без вмешательства в источник данных создает пользовательский элемент управления, расширяющий GridView и переопределяющий CreateChildControls, например, так:

ПРИМЕЧАНИЕ: Это пример того, как показать нижний колонтитул и верхний колонтитул также, когда источник данных представления сетки пуст .......

protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
{
    int numRows = base.CreateChildControls(dataSource, dataBinding);

    //no data rows created, create empty table if enabled
    if (numRows == 0 && ShowWhenEmpty)
    {
        //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
            GridViewRow headerRow = base.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);

            this.InitializeRow(headerRow, fields);
            table.Rows.Add(headerRow);
        }

        //create the empty row
        GridViewRow emptyRow = new GridViewRow(-1, -1, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);

        TableCell cell = new TableCell();
        cell.ColumnSpan = this.Columns.Count;
        cell.Width = Unit.Percentage(100);
        if(!String.IsNullOrEmpty(EmptyDataText))
            cell.Controls.Add(new LiteralControl(EmptyDataText));

        if(this.EmptyDataTemplate != null)
            EmptyDataTemplate.InstantiateIn(cell);

        emptyRow.Cells.Add(cell);
        table.Rows.Add(emptyRow);

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

            this.InitializeRow(footerRow, fields);
            table.Rows.Add(footerRow);
        }

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

ShowWhenEmpty - это простое свойство, для которого вы устанавливаете значение true, чтобы отображать верхние и нижние колонтитулы, когда они пусты:

[Category("Behaviour")]
[Themeable(true)]
[Bindable(BindableSupport.No)]
public bool ShowWhenEmpty
{
    get     
    {
        if (ViewState["ShowWhenEmpty"] == null)
            ViewState["ShowWhenEmpty"] = false;

        return (bool)ViewState["ShowWhenEmpty"];
    }
    set
    {
        ViewState["ShowWhenEmpty"] = value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...