2010-03-05 8 views
9

Je crée une partie Web SharePoint en C# et une partie de celle-ci génère un contrôle GridView sur la page. Bien que je puisse obtenir un contrôle assez étendu sur la façon dont il est affiché en définissant la classe CSS de GridView elle-même, ce que je voudrais vraiment faire est de pouvoir spécifier des classes à certains éléments td spécifiques. Je ne suis pas sûr comment faire cela, ou si cela serait fait au moment où le GridView est rempli avec des lignes, ou au moment où le GridView est ajouté à la page. En pseudocode, ce que j'avais essentiellement envisagé était de pouvoir dire quelque chose comme gridView.Row[4].CssClass = "header", ce qui placerait le td de la cinquième ligne dans le GridView à la classe "header".Comment spécifier des classes CSS pour des lignes spécifiques dans un GridView?

Je l'ai regardé en utilisant l'événement RowDataBound, donc je viens d'utiliser ce qui suit pour le tester:

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

Il est probablement mon incompréhension de la façon d'utiliser ce bien, mais il ne semble pas faire n'importe quoi. Je pensais que cela placerait toutes les lignes dans l'en-tête de la classe, et si c'était le cas, j'allais travailler sur ma logique à partir de là, mais je n'arrive même pas à faire fonctionner ça. Merci pour toute aide que quelqu'un peut vous apporter!

Répondre

17

je fais quelque chose de similaire avec 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 
    } 
} 

Une façon de vérifier que ce que vous faites est correct est de surveiller votre sortie html via le navigateur ... quelque chose comme Firebug aide vraiment.

Voici quelques CSS exemple, où nous attribuons de la dataGrid du CssClass au réseau:

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

Mise à jour: Câblage tout cela: j'utilise auto-fil sur la page ASPX. Votre déclaration de page ressemble à ceci:

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

Ce paramètre sur la page vous permet d'utiliser l'interface utilisateur pour connecter les événements. Cliquez sur la grille, sélectionnez les propriétés, cliquez sur l'icône de foudre et sous l'événement RowDataBound, sélectionnez votre méthode. Tout cela fait dans les coulisses est d'ajouter un attribut à la DataGridView, ainsi:

 <asp:GridView ID="uiActionGridView" runat="server" AllowSorting="True" AutoGenerateColumns="False" 
     OnRowDataBound="uiActionGridView_RowDataBound" OnDataBound="uiActionGridView_DataBound"> 
  • cela montre deux événements étant en place filaire, les événements DataBound et RowDataBound.

C'est ce que je fais en utilisant VS2005 et tout semble fonctionner. La seule chose que je peux penser que vous rencontrez est que vous liez manuellement l'événement après que le databind s'est produit.

+0

J'aime cette approche. Cependant, en parcourant le code dans le débogueur, je trouve que mon RowDataBound n'est pas appelé. Je l'ai écrit exactement tel qu'il est dans la question, et ma grille s'appelle outputGrid1. Avez-vous une idée pourquoi cela n'appellerait pas RowDataBound? –

+0

La seule chose supplémentaire que je devais faire était de définir la propriété RowDataBound de ma GridView à la méthode RowDataBound, comme ceci: outputGrid1.RowDataBound + = outputGrid1_RowDataBound; Merci de votre aide! –

+0

@Geo Eye: Veuillez consulter les mises à jour ci-dessus. Peut-être poster votre code si vous continuez à rencontrer des problèmes – Nij

Questions connexes