我希望我的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