我有一个包含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不支持?
答案 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";
}
}