[英]How do I replace a Hyperlink in a Gridview Column with an image, depending on the text in the column?
問題幾乎說明了一切。 在我的aspx頁面上,我有一個GridView,在“列”下,我有一束BoundField,其中一個是TemplateField
<asp:TemplateField HeaderText = "Status">
<ItemTemplate>
<asp:HyperLink ID = "HyperLink1" runat = "server" Target = "_blank"
NavigateUrl = '<%# Eval("URL") %>'
Text = '<%#Eval("Status") %>'>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
現在,我希望此超鏈接可以映射到其他圖像,具體取決於文本的評估對象。 例如,“成功”將顯示一個大的ol笑臉,而“失敗”則將顯示一個Frowney表情,依此類推。 我該如何實現?
感謝您的光臨。
您可以將圖像放在超鏈接中,例如
<img src='/images/status/<%#Eval("Status") %>.jpg' />
並根據名稱為每種狀態制作不同的圖像。 否則,您可能必須對DataBind事件進行操作。
嘗試這個
protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink HyperLink1 = e.Row.FindControl("HyperLink1");
if(SomeText == "Success")
HyperLink1.NavigateUrl = "Url to Smiley";
else
HyperLink1.NavigateUrl = "Url to Frowney";
}
}
HyperLink HyperLink1 = (HyperLink)e.Row.FindControl("HyperLink1");
switch (HyperLink1.Text)
{
case "Completed":
HyperLink1.ImageUrl = "Images\\Success.png";
HyperLink1.ToolTip = "Completed";
等等
ToolTip屬性映射到圖像的備用文本。
感謝codingbiz讓我入門。
如果您嘗試設置ImageUrl屬性,建議使用RowDataBound
事件。 該處理程序方法可能類似於:
protected void questionsGridView_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
DataSourceDataType row;
HyperLink hyperLink1;
if (e.Row.RowType == DataControlRowType.DataRow & e.Row.DataItem is DataSourceDataType)
{
row = (DataSourceDataType)e.Row.DataItem;
hyperLink1 = (HyperLink)e.Row.FindControl("HyperLink1");
hyperLink1.ImageUrl = (row.IsSuccess) ? "~/images/success.png" : "~/images/failure.png";
}
}
我使用的另一個技巧是將要綁定的數據對象更改為具有指示要使用的URL的屬性:
partial class DataSourceDataType
{
public string SuccessImgURL
{
get
{
return (IsSuccess) ? "~/images/success.png" : "~/images/failure.png";
}
}
}
然后,您綁定到該屬性。
注意: IsSuccess
需要用您自己的字段名稱或布爾條件替換。
我經常將它與LINQ to SQL對象一起使用,因此可以使用部分類在單獨的文件中添加屬性。 這樣,您不必擔心LINQ to SQL工具會刪除添加的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.