如何将AlternatingItemStyle应用于特定的DataGrid TemplateColumn?

时间:2014-01-10 15:24:20

标签: c# asp.net datagrid datagridtemplatecolumn

我有一个包含3个TemplateColumns的数据网格,每个包含一个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不支持?

1 个答案:

答案 0 :(得分: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";
            }
    }