我希望 GridView 的行基于名为 IsObsolete 的绑定数据值具有删除线。我试图这样做:
<RowStyle BackColor="#EFF3FB" Font-Strikeout='<%# Bind('IsObsolete') %>' />
但显然这不能解析。我宁愿不在 GridView.DataBound() 中这样做。还有其他想法吗?
我希望 GridView 的行基于名为 IsObsolete 的绑定数据值具有删除线。我试图这样做:
<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 代码中没有内联绑定。
由于 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>