web-dev-qa-db-fra.com

Comment ajouter une classe CSS à un BoundField afin de pouvoir la trouver avec jQuery?

Je veux ajouter un nom de classe à certains de mes BoundField dans le contrôle GridView; de sorte qu'une fois que GridView est lié aux données et rendu, je peux obtenir quelque chose comme:

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

Le but de faire une telle chose est de pouvoir trouver tous les éléments qui sont "Tag1" de cette façon:

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

Alors, comment puis-je ajouter cette classe au BoundField pour qu’elle soit rendue de cette manière?

19
pencilCake

Ne pouvez-vous pas définir directement la propriété itemstyle de votre boundfield dans l'aspx?

(TableItemstyle a une propriété CssClass)

<asp:BoundField ItemStyle-CssClass="Tag1"/>

Voir:

14
Tobiasopdenbrouw

Ajoutez la propriété ItemStyle à votre champ:

<asp:BoundField DataField="Count" HeaderText="Count">
    <ItemStyle CssClass="yourclass"></ItemStyle>
</asp:BoundField>
40
Ralph Willgoss

Vous pouvez définir la propriété CssClass de la cellule d'une ligne sur Tag1 lors de la création de la ligne (événement RowCreated).

Page.aspx :

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

Fichier code-behind, Page.aspx.cs :

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

Le code définira l'attribut class de chaque td de votre table sur Tag1; le balisage de la page rendue ressemblera à celui que vous recherchez:

<td class="Tag1"></td>
<td class="Tag1"></td>
...
5
Giuseppe Accaputo

Vous pouvez convertir en TemplateField puis utiliser une étiquette et ajouter le style de votre choix.

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

OR

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

Ça marche pour moi.

3
user3473248

ma réponse

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

1
mabel

J'ai fait quelque chose comme ça dans RowCreated_Event. J'ai dû coiffer les cellules en fonction de leurs valeurs.

http://msdn.Microsoft.com/de-de/library/system.web.ui.webcontrols.gridview.rowcreated.aspx

0
Yves M.

Pour ajouter un boundfield dans le code derrière (ceci est VB, mais similaire pour C #), essayez:

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

Si vous voulez rendre les données CssClass dépendantes, vous aurez besoin d'un templatefield, par exemple:

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

MyItemTemplate implémente ITemplate dans le dossier App_Code E.g:

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

Vous pouvez appliquer CssClass à l’étiquette directement, mais la question originale l’avait sur la cellule

0
Gordon Smith

Veillez à définir la propriété ItemStyle CssClass plutôt que l'une des autres. J'ai commis l'erreur de définir la propriété ControlStyle CssClass et ce n'est que lorsque j'ai lu ce post que j'ai réalisé mon erreur.

0
Zarepheth