2009-04-27 7 views

Respuesta

4

La manera más fácil de hacerlo es enlazar una matriz con una longitud de uno. Puedes poner cualquier cosa que quieras para identificar que esta es una fila ficticia. En su método GridViews RowDataBound compruebe si el elemento de datos es la fila ficticia (asegúrese de que RowType sea un DataRow primero antes de intentar verificar los datos). Si es la fila ficticia, establezca las filas de visibilidad en falso. El pie de página y el encabezado ahora deberían mostrarse sin ningún dato.

Asegúrese de establecer la propiedad ShowFooter en verdadero en su GridView.

por ejemplo.

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; 
     } 
    } 
} 
+0

Esto no funciona cuando genera columnas automáticamente == falso, ¿alguna otra idea? – msbyuva

+0

Debe ser como lo he hecho muchas veces antes. ¿Te has asegurado de haber vinculado algo en la carga de la página? – Mike737

+0

Esto no funcionó para mí porque tenía DataKeyNames especificado en la definición de la grilla. Se eliminaron los DataKeyNames y la cuadrícula que se muestra normalmente cuando solo aparece el pie de página cuando no hay datos. – YeeHaw1234

2

Aquí es algo fácil que he Construí:

/// <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; 
     }; 
    } 

para alegar ésta puede utilizar lo siguiente:

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

Espero que esto ayude. ¡Aclamaciones!

Cuestiones relacionadas