web-dev-qa-db-ja.com

CSSクラスをBoundFieldに追加して、jQueryで見つけられるようにするにはどうすればよいですか?

GridViewコントロールのBoundFieldsのいくつかにクラス名を追加したいのですが、 GridViewがデータにバインドされてレンダリングされると、次のようなものが得られます。

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

このようなことを行う目的は、次のようにして「Tag1」であるすべての要素を見つけることができるようにすることです。

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

では、このクラスをBoundFieldに追加して、このようにレンダリングするにはどうすればよいでしょうか。

21
pencilCake

Aspxでバウンドフィールドのitemstyleプロパティを直接設定できませんか?

(TableItemstyleにはCssClassプロパティがあります)

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

見る:

17

ItemStyleプロパティをフィールドに追加します。

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

行の作成時に、行のセルの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";
}

コードは、テーブル内の各classtd属性をTag1に設定します。レンダリングされたページのマークアップは、探しているもののようになります。

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

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>

わたしにはできる。

3
user3473248

私の答え

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

1
mabel

RowCreated_Eventでこのような処理を行いました。それらの値に従ってセルのスタイルを設定する必要がありました。

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

0
Yves M.

コードビハインドでバウンドフィールドを追加するには(これは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をラベルに直接適用できますが、元の質問ではセルにそれがありました

0
Gordon Smith

他の1つではなくItemStyle CssClassプロパティを設定してください。 ControlStyle CssClassプロパティの設定を間違えましたが、この投稿を読んで初めて、自分の間違いに気付きました。

0
Zarepheth