我有一个包含3个TemplateColumns的数据网格,每个包含一个HeaderTemplate和一个ItemTemplate。我为所有3列都放入了HeaderStyle,ItemStyle和AlternatingItemStyle(因此在标记之外)。
然后,我决定我想专门对第三列应用不同的ItemStyle,这是通过在特定的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?
在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";
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句