IsObsolete というバインドされたデータ値に基づいて、GridView の行に取り消し線を付けたいと思います。私はこれをやろうとしました:
<RowStyle BackColor="#EFF3FB" Font-Strikeout='<%# Bind('IsObsolete') %>' />
しかし、明らかにこれは解析されません。GridView.DataBound() ではこれを行いません。他のアイデアはありますか?
IsObsolete というバインドされたデータ値に基づいて、GridView の行に取り消し線を付けたいと思います。私はこれをやろうとしました:
<RowStyle BackColor="#EFF3FB" Font-Strikeout='<%# Bind('IsObsolete') %>' />
しかし、明らかにこれは解析されません。GridView.DataBound() ではこれを行いません。他のアイデアはありますか?
DataBinding
これを行うには、テンプレート内のコントロールの 1 つのイベントにスタイルを適用します。例:
<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 イベントを回避する理由はわかりません。これが最も簡単な方法です。
書式設定機能とアイテムスタイルを使用することもできます。上記のコードの一部を盗んで変更する:
<%
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>