asp boundfield在同一个字段中存储多个值

时间:2014-04-26 02:18:25

标签: gridview

我正在尝试从数据库中检索数据并在典型的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。

如果可以,请提供解决方案

1 个答案:

答案 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();
    }
}