2010-08-12 9 views
16

Voglio aggiungere un nome di classe ad alcuni dei miei BoundField nel controllo GridView; in modo che una volta che il GridView è associato a dati e reso posso ottenere qualcosa di simile:Come aggiungo una classe CSS ad un BoundField, quindi posso trovarlo con jQuery?

<td class="Tag1">Some data came from data source</td> 

Lo scopo di fare una cosa del genere è quello di essere in grado di trovare tutti gli elementi che sono "Tag1" in questo modo:

var allTag1td = $('td.Tag1'); 

Quindi, come posso aggiungere questa classe al BoundField in modo che venga renderizzata in questo modo?

risposta

5

È possibile impostare CssClass proprietà di cella di una riga per Tag1 al momento della creazione (RowCreated evento) della riga.

Page.aspx:

<asp:GridView OnRowCreated="grid_RowCreated" AutoGenerateColumns="true" runat="server" ID="grid"></asp:GridView> 

file code-behind, Page.aspx.cs:

protected void grid_RowCreated(object sender, GridViewRowEventArgs e) { 
    foreach (TableCell cell in e.Row.Cells) 
     cell.CssClass = "Tag1"; 
} 

Il codice sarà impostare l'attributo di ogni classtd della tabella a Tag1; il markup della pagina visualizzata sarà simile a quello che stai cercando:

<td class="Tag1"></td> 
<td class="Tag1"></td> 
... 
39

aggiungere la proprietà ItemStyle al vostro campo:

<asp:BoundField DataField="Count" HeaderText="Count"> 
    <ItemStyle CssClass="yourclass"></ItemStyle> 
</asp:BoundField> 
0

Assicurarsi di impostare la proprietà ItemStyle CssClass piuttosto che uno degli altri Ho fatto l'errore di impostare la proprietà CssClass ControlStyle e non è stato fino a quando ho letto questo post che ho capito il mio errore.

1

mia risposta

<asp:BoundField DataField="id" HeaderText="" SortExpression="id"> <ItemStyle Width="10%" CssClass="hide"/> <headerstyle CssClass="hide"> </headerstyle> </asp:BoundField>

3

È possibile convertire in TemplateField quindi utilizzare un Etichetta e Aggiungere qualsiasi stile che si desidera.

<asp:TemplateField HeaderText=""> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("Field") %>' CssClass="YourStyle" /> </ItemTemplate> </asp:TemplateField>

O

<asp:TemplateField HeaderText=""> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("Field") %>' Style="line-height: 1.4" /> </ItemTemplate> </asp:TemplateField>

Funziona per me.

0

Per aggiungere un BoundField in codice dietro (questo è VB, ma simile per C#) Ricerche:

bf = New BoundField() 
bf.DataField = "FieldName" 
bf.HeaderText = "Header" 
bf.SortExpression = "FieldName(could be different)" 
bf.ItemStyle.CssClass = "NoWrap" 
MyGrid.Columns.Add(bf) 

Se si vuole rendere i dati CssClass dipendente si avrebbe bisogno di un TemplateField Esempio:

tf = New WebControls.TemplateField() 
tf.HeaderText = "Whatever" 
tf.SortExpression = "Whatever" 
tf.ItemTemplate = New MyItemTemplate("DataField", "CssDataField") 
AssessmentGrid.Columns.Add(tf) 

MyItemTemplate ITemplate implementa nella cartella App_Code esempio:

Imports Microsoft.VisualBasic 

Public Class MyItemTemplate 
    Implements System.Web.UI.ITemplate 
    'Normally Template type would be in here but we are only do Item 
    '(no edit, delete or header etc) 
    Dim DataField1 As String 'Displayed data 
    Dim DataField2 As String 'CssClass 

    Sub New(ByVal Field1 As String, ByVal Field2 As String) 
     DataField1 = Field1 
     DataField2 = Field2 
    End Sub 

    Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) _ 
      Implements System.Web.UI.ITemplate.InstantiateIn 
     Dim ml As New Label() 
     ml.ID = DataField1 
     ml.Text = "" 
     ml.CssClass = "" 
     AddHandler ml.DataBinding, New EventHandler(AddressOf Item_DataBinding) 
     container.Controls.Add(l) 
    End Sub 

    Protected Sub Item_DataBinding(ByVal sender As Control, ByVal e As System.EventArgs) 
     Dim bound_value_object As Object 
     Dim data_item_container As IDataItemContainer = sender.NamingContainer 
     Dim Parent As TableCell = sender.Parent 
     Dim l As Label = sender 
     bound_value_object = DataBinder.Eval(data_item_container.DataItem, DataField1) 
     l.Text = bound_value_object.ToString 
     bound_value_object = DataBinder.Eval(data_item_container.DataItem, DataField2) 
     Parent.CssClass = bound_value_object.ToString 
    End Sub 
End Class 

Si potrebbe applicare CssCl ass all'etichetta diretta, ma la domanda originale l'aveva sulla cella

Problemi correlati