Сделать нижний колонтитул GridView видимым, если нет привязанных данных - PullRequest
5 голосов
/ 27 апреля 2009

как показать нижний колонтитул, когда в сетке нет данных для вставки данных из нижнего колонтитула.

Ответы [ 3 ]

4 голосов
/ 27 апреля 2009

Самый простой способ сделать это - связать массив длиной один. Вы можете поместить в него все, что захотите, чтобы определить, что это фиктивная строка. В вашем методе GridViews RowDataBound проверьте, является ли элемент данных фиктивной строкой (сначала убедитесь, что RowType является DataRow, прежде чем пытаться проверить данные). Если это фиктивная строка, установите для видимости строк значение false. Нижний колонтитул и заголовок теперь должны отображаться без каких-либо данных.

Убедитесь, что для свойства ShowFooter в GridView установлено значение true.

например.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostback)
    {
         myGrid.DataSource = new object[] {null};
         myGrid.DataBind();
    }
}    

protected void myGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.DataItem == null)
        {
             e.Row.Visible = false;
        }
    }
}
2 голосов
/ 18 октября 2013

Вот кое-что простое, что я создал:

    /// <summary>
    /// Ensures that the grid view will contain a footer even if no data exists.
    /// </summary>
    /// <typeparam name="T">Where t is equal to the type of data in the gridview.</typeparam>
    /// <param name="gridView">The grid view who's footer must persist.</param>
    public static void EnsureGridViewFooter<T>(GridView gridView) where T: new()
    {
        if (gridView == null)
            throw new ArgumentNullException("gridView");

        if (gridView.DataSource != null && gridView.DataSource is IEnumerable<T> && (gridView.DataSource as IEnumerable<T>).Count() > 0)
            return;

        // If nothing has been assigned to the grid or it generated no rows we are going to add an empty one.
        var emptySource = new List<T>();
        var blankItem = new T();
        emptySource.Add(blankItem);
        gridView.DataSource = emptySource;

        // On databinding make sure the empty row is set to invisible so it hides it from display.
        gridView.RowDataBound += delegate(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.DataItem == (object)blankItem)
                e.Row.Visible = false;
        };
    }

Чтобы вызвать его, вы можете использовать следующее:

        MyGridView.DataSource = data;
        EnsureGridViewFooter<MyDataType>(MyGridView);
        MyGridView.DataBind();

Надеюсь, это поможет. Ура!

0 голосов
/ 12 сентября 2011

Вот простой способ показать нижний колонтитул, когда в GridView есть пустые данные.

...