我希望我的GridView的行基于绑定数据值IsObsolete具有删除线。我试图这样做:基于绑定数据的GridView样式
<RowStyle BackColor="#EFF3FB" Font-Strikeout='<%# Bind('IsObsolete') %>' />
但显然这并不解析。我宁愿不在GridView.DataBound()中执行此操作。任何其他想法?
我希望我的GridView的行基于绑定数据值IsObsolete具有删除线。我试图这样做:基于绑定数据的GridView样式
<RowStyle BackColor="#EFF3FB" Font-Strikeout='<%# Bind('IsObsolete') %>' />
但显然这并不解析。我宁愿不在GridView.DataBound()中执行此操作。任何其他想法?
我通过在模板中的某个控件的DataBinding
事件上应用样式来完成此操作。例如:
<asp:GridView ID="grdYourGrid" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="SomeTitle">
<ItemTemplate>
<asp:HyperLink ID="hrefYourLink" runat="server"
NavigateUrl="Somepage.aspx?id={0}"
OnDataBinding="hrefYourLink_DataBinding"></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
然后实现OnDataBinding
事件:
protected void hrefYourLink_DataBinding(object sender, System.EventArgs e)
{
HyperLink link = (HyperLink)(sender);
GridViewRow row = (GridViewRow)(link.Parent.Parent);
if ((bool)(Eval("IsObsolete"))
{
row.CssClass = "StrikeThroughStyle";
}
link.Text = HttpUtility.HtmlEncode(((int)(Eval("ID"))).ToString());
link.NavigateUrl = string.Format(link.NavigateUrl, Eval("ID").ToString());
}
这只是一个简单的例子与一个链接一列,系统会根据数据绑定修改好,但你应该能够得到如果调整它的要点以满足您的需求。我喜欢在数据绑定上做这件事,因为我没有绑定在我的aspx代码中。
@Matthew琼斯你有没有想过这个?如果您需要更多帮助,请发表评论或编辑您的问题,我会看到我能做些什么。 – Kelsey 2010-08-11 21:44:44
由于RowStyle元素适用于整个网格,要实现所需的唯一方法是为所有列设置TemplateItems,并根据相同的数据值将CssClass应用于每列。
我不确定你的理由是为了避免DataBound事件,因为这是实现它的最简单方法。
你也可以尝试使用格式化功能和itemstyles。从上方窃取一小段代码并更改它:
<%
public string GetObsoleteClass(string obsolete)
{
bool obs = Convert.ToBoolean(obsolete);
obs ? return "myObsoleteClass" : return "myNotObsoleteClass";
}
%>
<asp:GridView ID="grdYourGrid" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="SomeTitle">
<ItemTemplate>
<asp:HyperLink ID="hrefYourLink" runat="server"
NavigateUrl="Somepage.aspx?id={0}"
OnDataBinding="hrefYourLink_DataBinding"></asp:HyperLink>
</ItemTemplate>
<itemstyle CssClass='<%# Eval("isObsolete") %>'>
</itemstyle>
</asp:TemplateField>
<asp:boundfield
sortexpression="LastName"
datafield="LastName"
headertext="LastName">
<itemstyle CssClass='<%# Eval("isObsolete") %>'>
</itemstyle>
</asp:boundfield>
</Columns>
</asp:GridView>
Css可以设置在行级,不需要单独设置每个项目,除非您想重写某些内容。另外,我在DataBinding项目上执行此操作,因为我通常至少定义了其中一个,并且很少实现任何其他DataBound事件,因此只需将其添加到第一项DataBinding事件中就可以了。另外,如果你想为不同颜色的整行着色,我的方法运行良好。 – Kelsey 2010-05-01 01:03:26
@凯尔西 - 这就是他想要做的 - 重写一些东西。我同意使用该事件是首选方法,但他在问题中特别指出他不想使用该事件。 – 2010-05-01 11:38:01
您的网格数据绑定列是动态的吗? – Myra 2010-04-30 14:27:42
@CAbbott:使用ItemDataBound会相当困难,特别是因为GridView没有这个方法。 :) – 2010-04-30 14:28:50
@Myra nope,从数据库使用SqlDataSource。如果他们是,这会更容易。 – 2010-04-30 14:29:07