Ответ 1
Не можете ли вы напрямую установить свойство itemstyle вашего связанного поля в aspx?
(TableItemstyle имеет свойство CssClass)
<asp:BoundField ItemStyle-CssClass="Tag1"/>
См:
Я хочу добавить имя класса в некоторые из моих BoundFields в элементе управления GridView; так что, как только GridView привязан к данным и отображен, я могу получить что-то вроде:
<td class="Tag1">Some data came from data source</td>
Целью такой работы является возможность найти все элементы, которые являются "Tag1" следующим образом:
var allTag1td = $('td.Tag1');
Итак, как я могу добавить этот класс в BoundField, чтобы он отображался таким образом?
Не можете ли вы напрямую установить свойство itemstyle вашего связанного поля в aspx?
(TableItemstyle имеет свойство CssClass)
<asp:BoundField ItemStyle-CssClass="Tag1"/>
См:
Добавьте свойство ItemStyle в свое поле:
<asp:BoundField DataField="Count" HeaderText="Count">
<ItemStyle CssClass="yourclass"></ItemStyle>
</asp:BoundField>
Вы можете установить свойство ячейки строки CssClass
в Tag1
при создании строки (RowCreated
event).
Page.aspx:
<asp:GridView OnRowCreated="grid_RowCreated" AutoGenerateColumns="true" runat="server" ID="grid"></asp:GridView>
Файл с кодовым кодом, Page.aspx.cs:
protected void grid_RowCreated(object sender, GridViewRowEventArgs e) {
foreach (TableCell cell in e.Row.Cells)
cell.CssClass = "Tag1";
}
Код будет устанавливать атрибут class
для каждого td
в вашей таблице Tag1
; разметка отображаемой страницы будет выглядеть так, как вы хотите:
<td class="Tag1"></td>
<td class="Tag1"></td>
...
Вы можете преобразовать в TemplateField, затем использовать ярлык и добавить любой стиль, который вы хотите.
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Field") %>' CssClass="YourStyle" />
</ItemTemplate>
</asp:TemplateField>
ИЛИ
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Field") %>' Style="line-height: 1.4" />
</ItemTemplate>
</asp:TemplateField>
Это работает для меня.
мой ответ
<asp:BoundField DataField="id" HeaderText="" SortExpression="id">
<ItemStyle Width="10%" CssClass="hide"/>
<headerstyle CssClass="hide"> </headerstyle>
</asp:BoundField>
Я сделал подобное в RowCreated_Event. Мне нужно было стилизовать ячейки в соответствии с их значениями.
http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.gridview.rowcreated.aspx
Обязательно установите свойство ItemStyle
CssClass, а не одно из других. Я допустил ошибку, установив свойство ControlStyle
CssClass, и только после того, как я прочитал этот пост, я осознал свою ошибку.
Для добавления связанного поля в код позади (это VB, но аналогичный для С#):
bf = New BoundField()
bf.DataField = "FieldName"
bf.HeaderText = "Header"
bf.SortExpression = "FieldName(could be different)"
bf.ItemStyle.CssClass = "NoWrap"
MyGrid.Columns.Add(bf)
Если вы хотите, чтобы данные CssClass зависели от вас, вам понадобится шаблонное поле Eg:
tf = New WebControls.TemplateField()
tf.HeaderText = "Whatever"
tf.SortExpression = "Whatever"
tf.ItemTemplate = New MyItemTemplate("DataField", "CssDataField")
AssessmentGrid.Columns.Add(tf)
MyItemTemplate реализует ITemplate в папке App_Code. Например:
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
Вы можете применить CssClass к ярлыку direct, но исходный вопрос имел его в ячейке