GridViewコントロールのBoundFieldsのいくつかにクラス名を追加したいのですが、 GridViewがデータにバインドされてレンダリングされると、次のようなものが得られます。
<td class="Tag1">Some data came from data source</td>
このようなことを行う目的は、次のようにして「Tag1」であるすべての要素を見つけることができるようにすることです。
var allTag1td = $('td.Tag1');
では、このクラスをBoundFieldに追加して、このようにレンダリングするにはどうすればよいでしょうか。
Aspxでバウンドフィールドのitemstyleプロパティを直接設定できませんか?
(TableItemstyleにはCssClassプロパティがあります)
<asp:BoundField ItemStyle-CssClass="Tag1"/>
見る:
ItemStyleプロパティをフィールドに追加します。
<asp:BoundField DataField="Count" HeaderText="Count">
<ItemStyle CssClass="yourclass"></ItemStyle>
</asp:BoundField>
行の作成時に、行のセルのCssClass
プロパティをTag1
に設定できます(RowCreated
イベント)。
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に変換してから、Labelを使用して、必要なスタイルを追加できます。
<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>
わたしにはできる。
私の答え
<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
コードビハインドでバウンドフィールドを追加するには(これはVBですが、C#でも同様です)、以下を試してください。
bf = New BoundField()
bf.DataField = "FieldName"
bf.HeaderText = "Header"
bf.SortExpression = "FieldName(could be different)"
bf.ItemStyle.CssClass = "NoWrap"
MyGrid.Columns.Add(bf)
CssClassデータに依存させる場合は、テンプレートフィールドが必要になります。例:
tf = New WebControls.TemplateField()
tf.HeaderText = "Whatever"
tf.SortExpression = "Whatever"
tf.ItemTemplate = New MyItemTemplate("DataField", "CssDataField")
AssessmentGrid.Columns.Add(tf)
MyItemTemplateは、App_CodeフォルダーにITemplateを実装します。
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をラベルに直接適用できますが、元の質問ではセルにそれがありました
他の1つではなくItemStyle
CssClassプロパティを設定してください。 ControlStyle
CssClassプロパティの設定を間違えましたが、この投稿を読んで初めて、自分の間違いに気付きました。