GridView Style基于绑定数据

时间:2010-04-30 14:20:01

标签: asp.net gridview coding-style strikethrough

我希望我的GridView的行基于名为IsObsolete的绑定数据值进行删除。我试着这样做:

<RowStyle BackColor="#EFF3FB" Font-Strikeout='<%# Bind('IsObsolete') %>' />

但显然这不解析。我宁愿不在GridView.DataBound()中这样做。还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

我通过在模板中的某个控件的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代码中没有内联绑定。

答案 1 :(得分:0)

由于RowStyle元素适用于整个网格,因此实现所需内容的唯一方法是为所有列设置TemplateItem,并根据相同的数据值将CssClass应用于每个列。

我不确定你为避免使用DataBound事件的原因,因为这是实现它的最简单方法。

您也可以尝试使用格式化功能和项目样式。从上面窃取一些代码并更改它:

<%

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>