2010-03-05 1 views
9

Sto creando una web part di SharePoint in C# e parte di esso restituisce un controllo GridView alla pagina. Mentre riesco ad ottenere un controllo abbastanza ampio sul modo in cui viene visualizzato impostando la classe CSS del GridView stesso, quello che vorrei davvero fare è essere in grado di specificare le classi su determinati elementi specifici di td. Non sono sicuro di come procedere, o se sarebbe fatto al momento in cui GridView viene popolato con le righe o al momento in cui GridView viene aggiunto alla pagina.Come si specificano le classi CSS per righe specifiche in GridView?

In pseudocodice, ciò che avevo essenzialmente immaginato era di poter dire qualcosa come gridView.Row[4].CssClass = "header", che avrebbe impostato il td della quinta riga in GridView alla classe "intestazione".

Ho guardato in utilizzando l'evento RowDataBound, quindi ho solo usato il seguente per testarlo:

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

E 'probabilmente il mio fraintendimento di come utilizzare correttamente che, ma non sembra fare nulla. Pensavo che avrebbe impostato tutte le righe sulla "intestazione" della classe e, in caso affermativo, avrei lavorato sulla mia logica da lì, ma non riesco nemmeno a farlo funzionare. Grazie per l'aiuto che chiunque può fornire!

risposta

17

faccio qualcosa di simile 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 
    } 
} 

Un modo per verificare che quello che stai facendo è corretto è quello di monitorare l'output HTML tramite il browser ... qualcosa come Firebug aiuta veramente.

Ecco qualche CSS campione, dove si assegna il CssClass 'dataGrid' alla griglia:

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

Aggiornamento: Cablaggio tutto questo in su: io uso auto-wire-up sulla pagina aspx. La dichiarazione della pagina è simile a questa:

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

Questa impostazione nella pagina consente di utilizzare l'interfaccia utente per connettere gli eventi. Fare clic sulla griglia, selezionare le proprietà, fare clic sull'icona di fulmine e sotto l'evento RowDataBound, selezionare il metodo. Tutto questo fa dietro le quinte è aggiungere un attributo al DataGridView, in tal modo:

 <asp:GridView ID="uiActionGridView" runat="server" AllowSorting="True" AutoGenerateColumns="False" 
     OnRowDataBound="uiActionGridView_RowDataBound" OnDataBound="uiActionGridView_DataBound"> 
  • questo dimostra due eventi sia wired-up, gli eventi e databound RowDataBound.

Questo è quello che faccio utilizzando VS2005 e tutto sembra funzionare ". L'unica cosa che posso pensare tu stia sperimentando è che stai legando manualmente l'evento dopo il che si è verificato il database.

+0

Mi piace questo approccio. Tuttavia, passando il codice nel debugger, trovo che il mio RowDataBound non viene chiamato. L'ho scritto esattamente come è nella domanda e la mia griglia si chiama outputGrid1. Hai idea del motivo per cui non chiamerebbe RowDataBound? –

+0

L'unica cosa aggiuntiva che dovevo fare era impostare la proprietà RowDataBound della mia GridView sul metodo RowDataBound, in questo modo: outputGrid1.RowDataBound + = outputGrid1_RowDataBound; Grazie per l'aiuto! –

+0

@Geo Eye: vedere gli aggiornamenti sopra. Magari inserisci il tuo codice se continui a riscontrare problemi – Nij