我正在尝试从数据库中检索数据并在典型的SHOPPING网站中显示它。 现在我需要一个页面来显示图像和一个字段中的类别名称。
这是我对Gridview的设计
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<columns>
<asp:BoundField DataField="Cat_id" HeaderText="ID" />
<asp:BoundField DataField="Cat_name" HeaderText="Name" />
<asp:BoundField DataField="Cat_desc" HeaderText="Description" />
<asp:ImageField DataImageUrlField="Cat_filepath" ControlStyle-Width="100" ControlStyle-Height="100" HeaderText="Preview Image" />
</columns>
</asp:GridView>
这是我的Gridview显示其各自字段中的所有值,但我希望图像和cat_name在同一个字段中,我可以使用TemplateField执行此操作,但我无法通过TemplateField检索imageurlfield。
如果可以,请提供解决方案
答案 0 :(得分:0)
嗯,这个问题很古老,但迟到总比没有好......
首先,您需要在给定列中关闭HtmlEncode
:
<asp:BoundField DataField="Cat_name" HeaderText="Name" HtmlEncode="false" />
然后你可以创建一个Image
控件并直接在GridView
的单元格中进行渲染。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = DataProvider.GetData();
foreach (DataRow row in dt.Rows)
{
var img = new Image()
{
ImageUrl = row["Cat_filepath"].ToString(),
AlternateText = row["Cat_name"].ToString()
};
row["Cat_name"] += ControlsRenderer.RenderControl(img);
}
myGridView.DataSource = dt;
myGridView.DataBind();
}
}
public static class ControlsRenderer
{
/// <summary>
/// Returns the generated HTML markup for a Control object
/// </summary>
public static string RenderControl(Control control)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
control.RenderControl(writer);
return sb.ToString();
}
}