2012-01-22 24 views
5

Soy nuevo en Asp.net y actualmente estoy trabajando con GridViews. He buscado en este sitio y otros han visto consejos sobre cómo agregar flechas de clasificación a los encabezados de las columnas.Agregar flechas de clasificación predeterminadas a GridView

Hasta ahora he hecho esto:

establecer estas propiedades GridView:

SortedAscendingHeaderStyle-CssClass="sortasc" 
SortedDescendingHeaderStyle-CssClass="sortdesc" 

Y mi css tiene esta:

th.sortasc a 
{ 
    display:block; padding:0 4px 0 15px; 
    background:url("images/icons/ascArrow.png") no-repeat; 
} 

th.sortdesc a 
{ 
    display:block; padding:0 4px 0 15px; 
    background:url("images/icons/descArrow.png") no-repeat; 
} 

Esto funciona muy bien para mostrar una imagen después de la el usuario hace clic en un encabezado y ordena la columna.

El problema que estoy teniendo ahora, es que me gustaría que las columnas muestren imágenes de manera predeterminada para que los usuarios sepan que pueden hacer clic en ellas para ordenarlas. ¿Hay alguna manera de lograr esto?

Respuesta

10

se puede mostrar la flecha para clasificar el comportamiento de una columna gridview en el RowCreated caso de que algo como esto por lo general lo hago de esta manera

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     foreach (TableCell tc in e.Row.Cells) 
     { 
      if (tc.HasControls()) 
      { 
       // search for the header link 
       LinkButton lnk = (LinkButton)tc.Controls[0]; 
       if (lnk != null && GridView1.SortExpression == lnk.CommandArgument) 
       { 
        // inizialize a new image 
        System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image(); 
        // setting the dynamically URL of the image 
        img.ImageUrl = "~/img/ico_" + (GridView1.SortDirection == SortDirection.Ascending ? "asc" : "desc") + ".gif"; 
        // adding a space and the image to the header link 
        tc.Controls.Add(new LiteralControl(" ")); 
        tc.Controls.Add(img); 

       } 
      } 
     } 
    } 
} 

sino que también cambia la imagen de ascenso y descenso de ordenación de la columna

Qué hacer realidad el código es recorre la cabecera GridView para buscar un LinkButton(el Marco crea sólo si la propiedad se establece SortExpression). Entonces, si el encontrado LinkButton es el campo ordenado, entonces se muestra la imagen a la salida, eso es todo

AnswerSource

+0

En realidad podría mover la inicialización de img en la sentencia if, y combinar las sentencias if. 'if (lnk! = null && GridView1.SortExpression == lnk.CommandArgument) {...' – Patrick

+1

@ Patrick ver la edición y gracias por sugerir la mejora – Devjosh

+0

¡Muchas gracias por la ayuda! Voy a probar esto. Sin embargo, tengo un par de preguntas: ¿hay partes de esto que debería cambiar para VB en lugar de C#? Además, aún no he trabajado con eventos para los controles, soy bastante nuevo en esto. ¿Algún consejo sobre a dónde ir para editar el evento generado por la fila de una vista de cuadrícula? – Cineno

Cuestiones relacionadas