将图像添加到DataTable以在GridView asp.net中显示

时间:2013-07-31 00:54:28

标签: c# asp.net visual-studio

我正在尝试通过数据表绑定在GrIdView中显示图像,但它只是打印出纯文本而不是在ie中显示图片。

  

dt = new DataTable();

        dt.Columns.Add("Status", typeof(string));
        dt.Columns.Add("CRQ", typeof(String));
        dt.Columns.Add("Summary", typeof(String));
        dt.Columns.Add("Time", typeof(String));
        Session["TempTable"] = dt;
        GridView1.DataSource = dt;

        //

        //datat load
        dt = (DataTable)Session["TempTable"]; // Fetching datatable from session

        DataRow dr = dt.NewRow(); // Adding new row to datatable
        dr[0] = "<img src='C:\\Users\\josephs\\Desktop\\red.jpg' style='border-width:0px'/>";
        dr[1] = "CRQ000000000789";
        dr[2] = "Test CRQ Summary, example data";
        dr[3] = "WED 31/07/2013 16:00:00 PM";
        dt.Rows.Add(dr);

        DataRow dr2 = dt.NewRow(); // Adding new row to datatable
        dr2[0] = "<img src='C:\\Users\\josephs\\Desktop\\red.jpg' style='border-width:0px'/>";
        dr2[1] = "CRQ000000000889";
        dr2[2] = "Test another CRQ, example data";
        dr2[3] = "Tue 6/08/2013 14:00:00 PM";
        dt.Rows.Add(dr2);



        Session["TempTable"] = dt;   // update datatable in session
        GridView1.DataSource = dt;   // updated datatable is now new datasource
        GridView1.DataBind();        // calling databind on gridview

1 个答案:

答案 0 :(得分:3)

默认情况下,GridView会对单元格的HTML内容进行编码。

在网格ASPX标记中添加对RowDataBound事件处理程序的引用

<asp:gridview id="GridView1" 
        autogeneratecolumns="true"
        onrowdatabound="GridView1_RowDataBound" 
        runat="server">
</asp:gridview>

然后添加以下代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {

    if (e.Row.RowType == DataControlRowType.DataRow) {
       e.Row.Cells[0].Text = Server.HtmlDecode(e.Row.Cells[0].Text);
    }
}

注意:在ASP.NET应用程序中,将物理路径引用为IMG源并不是一个好主意 - 它只能在您的开发机器上运行。将图像放在应用程序的子文件夹中,并使用相对虚拟路径。

哦顺便说一下,如果你的GridView中的列不是自动生成的,而是在网格的ASPX标记中定义,那么代替上面的方法简单地将属性htmlencode="false"添加到boundfield的声明:

<asp:boundfield datafield="Status"
            htmlencode="false"
            headertext="Status"/>