2010-10-04 12 views
5

como se señala en la pregunta:GridView - el uso de CSS-Friendly Control de adaptadores elimina EmptyDataTemplate y EmptyDataText

Una de las soluciones es desactivar las addapters para los componentes de GridView como se especifica en this answer

¿Hay una solución, que permitiría mantener el uso de CSS-Friendly Control Adapters de GridView y todavía aprovechar la funcionalidad EmptyDataTemplate ?

+0

Fascinante, año 2014 y aún no resuelto ... Al menos la respuesta aceptada todavía funciona. – walther

Respuesta

3

Si nos fijamos en la fuente para el adaptador CSS-friendly de GridView, proporcionada en su enlace, verá la siguiente (nótese el falta otra cosa):

private void WriteRows(HtmlTextWriter writer, GridView gridView, GridViewRowCollection rows, string tableSection) 
{ 
    if (rows.Count > 0) 
    { 

Básicamente el adaptador no hace mención de EmptyDataTemplate o EmptyDataText - es un simple descuido. Sin embargo, aplicar parches es sencillo. Todo lo que tiene que hacer es tomar la fuente proporcionado, buscar la forma original de la GridView la hace, se combinan los conceptos, y reconstruir el adaptador original:

case DataControlRowType.EmptyDataRow: 
       if (this._emptyDataTemplate == null) 
       { 
        container = new TableCell(); 
        string emptyDataText = this.EmptyDataText; 
        if (emptyDataText.Length > 0) 
        { 
         container.Text = emptyDataText; 
        } 
        break; 
       } 
       container = new TableCell(); 
       template = this._emptyDataTemplate; 
       break; 
     } 
     if (container != null) 
     { 
      if (columnSpan > 1) 
      { 
       container.ColumnSpan = columnSpan; 
      } 
      if (template != null) 
      { 
       template.InstantiateIn(container); 
      } 
      row.Cells.Add(container); 
     } 
+0

+1 gracias a Nariman, eso explica bien por qué el problema existe en primer lugar – kristof

1

Añadir lo siguiente a RenderContents en GridViewAdapter.cs justo antes de la///// BODY //// sección /////////////// EmptyDataTemplate ///////////////////////

if (gridView.Rows.Count == 0) { 
    //Control[0].Control[0] s/b the EmptyDataTemplate. 
    if (gridView.HasControls()) { 
     if (gridView.Controls[0].HasControls()) { 
      if (gridView.Controls[0].Controls[0] is GridViewRow) { 
       rows.Clear(); 
       rows.Add(gridView.Controls[0].Controls[0]); 
       gvrc = new GridViewRowCollection(rows); 
       WriteRows(writer, gridView, gvrc, "tfoot"); 
      } 
     } 
    } 
} 

Y agregue lo siguiente a GetRowClass justo antes de devolver className.Trim();

//// EmptyDataTemplate 
if ((row.RowType & DataControlRowType.EmptyDataRow) == DataControlRowType.EmptyDataRow) { 
className += " AspNet-GridView-Empty "; 
} 

Por último, si desea reemplazar el estilo tfoot estándar, agregue una sección CSS

.AspNet-GridView table tfoot tr.AspNet-GridView-Empty td 
{ 

} 
Cuestiones relacionadas