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?
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:
Ajoutez la propriété ItemStyle à votre champ:
<asp:BoundField DataField="Count" HeaderText="Count">
<ItemStyle CssClass="yourclass"></ItemStyle>
</asp:BoundField>
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>
...
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.
ma réponse
<asp:BoundField DataField="id" HeaderText="" SortExpression="id">
<ItemStyle Width="10%" CssClass="hide"/>
<headerstyle CssClass="hide"> </headerstyle>
</asp:BoundField>
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
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
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.