2010-03-05 18 views
9

Estoy creando un elemento web de SharePoint en C# y parte de él genera un control GridView en la página. Si bien puedo obtener un control bastante extenso sobre la forma en que se muestra configurando la clase CSS de GridView, lo que realmente me gustaría hacer es poder especificar clases para ciertos elementos td específicos. No estoy seguro de cómo hacerlo, o si se haría en el momento en que GridView se rellena con filas, o en el momento en que se agrega GridView a la página.¿Cómo especifico las clases CSS para filas específicas en un GridView?

En pseudocódigo, lo que esencialmente había previsto era poder decir algo como gridView.Row[4].CssClass = "header", que establecería el td de la quinta fila en el GridView en el "encabezado" de la clase.

He mirado en utilizar el evento RowDataBound, por lo que sólo utilizó la siguiente para probarlo:

protected void outputGrid1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    e.Row.CssClass = "outputHeader"; 
} 

Es probablemente mi falta de comprensión de cómo utilizar ese correctamente, pero no parece que hacer cualquier cosa. Pensé que establecería todas las filas en el "encabezado" de la clase, y si lo hubiera hecho, iba a trabajar en mi lógica desde allí, pero ni siquiera puedo hacer que funcione. ¡Gracias por cualquier ayuda que alguien pueda brindar!

Respuesta

17

que hacer algo similar con RowDataBound:

if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
    // Check the XXXX column - if empty, the YYYY needs highlighting! 
    if (e.Row.Cells[6].Text == " ") 
    { 
     e.Row.CssClass = "highlightRow"; // ...so highlight it 
    } 
} 

Una forma de comprobar que lo que está haciendo es correcto es para controlar su salida HTML a través del navegador ... algo así como Firebug realmente ayuda.

Aquí hay un poco de CSS muestra, donde asignamos el CssClass 'dataGrid' a la Red:

/* Used to highlight rows */ 
table.dataGrid tr.highlightRow td 
{ 
    background-color: #FF6666; 
    border-bottom: 1px solid #C0C0FF; 
} 

Actualización: Cableado de todo esto: Yo uso de auto-alambre plano en la página aspx. Su declaración página se ve algo como esto:

<%@ Page Language="C#" MasterPageFile="~/XXXXXX.master" AutoEventWireup="true" CodeBehind="YYYY.aspx.cs" Inherits="ZZZ.ZZZ.AAAAAA" Title="View Blah" %> 

Este ajuste en la página le permite utilizar la interfaz de usuario para conectar los eventos. Haga clic en la cuadrícula, seleccione las propiedades, haga clic en el ícono de rayo, y en el evento RowDataBound, seleccione su método. Todo esto lo hace detrás de las escenas es añadir un atributo al DataGridView, por lo tanto:

 <asp:GridView ID="uiActionGridView" runat="server" AllowSorting="True" AutoGenerateColumns="False" 
     OnRowDataBound="uiActionGridView_RowDataBound" OnDataBound="uiActionGridView_DataBound"> 
  • esta muestra dos eventos siendo cable plano, los eventos de enlace de datos y RowDataBound.

Esto es lo que hago usando VS2005 y todo parece 'solo funcionar'. Lo único que creo que está experimentando es que está vinculando manualmente el evento después de que haya ocurrido la conexión de datos.

+0

Me gusta este enfoque. Sin embargo, al recorrer el código en el depurador, descubro que RowDataBound no se está llamando. Lo escribí exactamente como está en la pregunta, y mi grilla se llama outputGrid1. ¿Tienes alguna idea de por qué eso no sería llamar a RowDataBound? –

+0

La única cosa adicional que tenía que hacer era establecer la propiedad RowDataBound de mi GridView en el método RowDataBound, así: outputGrid1.RowDataBound + = outputGrid1_RowDataBound; ¡Gracias por tu ayuda! –

+0

@Geo Eye: consulte las actualizaciones anteriores. Tal vez publique su código si continúa teniendo problemas – Nij

Cuestiones relacionadas