【问题标题】:How do you apply an AlternatingItemStyle to a specific DataGrid TemplateColumn?如何将 AlternatingItemStyle 应用于特定的 DataGrid TemplateColumn?
【发布时间】:2014-01-10 15:24:19
【问题描述】:

我有一个包含 3 个模板列的数据网格,每个模板列包含一个 HeaderTemplate 和一个 ItemTemplate。我为所有 3 列添加了 HeaderStyle、ItemStyle 和 AlternatingItemStyle(所以在标签之外。

然后我决定将不同的 ItemStyle 专门应用于第 3 列,我通过在特定 TemplateColumn 中添加 ItemStyle 来做到这一点。这很好用,只是我仍然想要的 AlternatingItemStyle 不再适用。我想我可以简单地在特定的 TemplateColumn 中添加另一个 AlternatingItemStyle ,但这不受支持。我也尝试通过 OnDataBinding 命令将其添加到后面的代码中,但 AlternatingItemStyle 没有出现在 Column 属性下。代码如下:

<asp:DataGrid ID="dgErrors"
CssClass="cssErrors"
Caption="Errors"  
AutoGenerateColumns="false"
CellPadding="3"
runat="server">
    <Columns>
        <asp:TemplateColumn>
            <HeaderTemplate>Job Number</HeaderTemplate>
            <ItemTemplate><%# Eval("Job Number") %></ItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn>
            <HeaderTemplate>Error</HeaderTemplate>
            <ItemTemplate><%# Eval("Error") %></ItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn>
            <HeaderTemplate>Row Number</HeaderTemplate>
            <ItemTemplate><%# Eval("Line Number") %></ItemTemplate>
         <ItemStyle CssClass="TableItemStyleRowNo" />
         </asp:TemplateColumn>
     </Columns>

     <HeaderStyle CssClass="TableHeaderStyle" />
     <ItemStyle CssClass="TableItemStyle" />
     <AlternatingItemStyle CssClass="TableAlternatingItemStyle" />
 </asp:DataGrid>

我的问题是;首先,如何将 AlternatingItemSyle 应用于特定的 TemplateColumn?其次,为什么 TemplateColumn 中支持 ItemStyle 而 AlternatingItemStyle 不支持?

【问题讨论】:

    标签: c# asp.net datagrid datagridtemplatecolumn


    【解决方案1】:

    DataGrid 的 属性

    <ItemStyle CssClass="TableItemStyle" />
         <AlternatingItemStyle CssClass="TableAlternatingItemStyle" />
    

    适用于Datagrid的整行而不是单个列。

    要实现您的要求,请执行以下更改:

    在您的 aspx 页面中添加 OnItemDataBound 属性如下:

     <asp:DataGrid ID="dgErrors"
    CssClass="cssErrors"
    Caption="Errors"  
    AutoGenerateColumns="false"
    CellPadding="3"
    runat="server" 
    OnItemDataBound = "dgErrors_ItemBound">
    

    在您的 .cs 页面中添加此代码:

    protected void dgErrors_ItemBound(Object sender, DataGridItemEventArgs e)
        {
                if (e.Item.ItemType == ListItemType.Item)
                {
                    e.Item.Cells[0].CssClass = "TableItemStyleRowNo";
                }
                else if(e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    e.Item.Cells[0].CssClass = "AlternateTableItemStyleRowNo";
                }
        }
    

    【讨论】:

    • 这是问题的一部分。我最初只想将 ItemStyle 和 AlternatingItemStyle 应用于整个数据网格。但是,我现在希望所有列都具有这些样式,但 1 除外,我只想更改 ItemStyle 而不是 AlternatingItemStyle。所以在 TemplateColumn 中添加 ItemStyle 就可以了,但是现在 AlternatingItemSytle 不适用了。
    • 抱歉,奇怪的是只有部分答案出现了。我会试试你的代码,让你知道我是怎么做的。
    • 这行得通(尽管它是 Cells[2])。谢谢!似乎很奇怪,您不能在列中应用 AlternatingItemStyles 但您可以使用 ItemStyle。
    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 2015-09-01
    • 2011-08-27
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2011-03-17
    • 2023-03-08
    相关资源
    最近更新 更多