【问题标题】:how to have one of the column in gridview to be an image?如何让gridview中的一列成为图像?
【发布时间】:2011-12-20 11:25:19
【问题描述】:

我有一个在代码隐藏中创建的网格视图。

在下面的代码中,我希望第三列是一些图像(例如:PDF 图标或类似的)。

我在想Type.GetType 需要为名为“Image”的列更改??

DataTable dt = new DataTable();
GridView gview = new GridView();
DataRow dr;
DataColumn dc = new DataColumn("Description", Type.GetType("System.String"));
dt.Columns.Add(dc);
dc = new DataColumn("Image", Type.GetType("System.String"));
dt.Columns.Add(dc);
dc = new DataColumn("Size (MB)", Type.GetType("System.String"));
dt.Columns.Add(dc);
{
    dr = dt.NewRow();
    dr["Description"] = item["Name"];
    dr["Size (MB)"] = item["Size"];
    dr["Image"] = "pdf.gif"; // put complete reference here,
    dt.Rows.Add(dr);
}
gview.DataSource = dt;
gview.DataBind();
Controls.Add(gview);

【问题讨论】:

    标签: asp.net image gridview code-behind


    【解决方案1】:

    只需将图像 URL 存储在 DataTable 中,而不是实际图像。然后,在 GridView 中使用 TemplateField 并在 ItemTemplate 中放置图像:

    <asp:TemplateField>
        <ItemTemplate>
            <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("ImageUrlColumn") %>' ... />
        </ItemTemplate>
    </asp:TemplateField>
    

    您也可以使用ImageField

    <asp:ImageField DataImageUrlField="ImageNameColumn" DataImageUrlFormatString="/images/{0}"></asp:ImageField>
    

    编辑

    当声明列时,试试这个:

    dt.Columns.Add("Image", typeof(string));
    

    要设置图像列的值,试试这个:

    dr.SetField<string>("Image", "img.png");
    

    【讨论】:

    • 我无法完全理解。我需要在哪里定义 ImageUrlColumn?是我在代码隐藏中定义的列名吗?
    • 不要尝试将图像存储在 DataTable 中,而是存储图像的路径,即/images/somepic.pngImageUrlColumn 只是为了展示这个想法。
    • 我只存储路径(如第一篇文章中所述),路径将包含您提到的某个文件夹。我仍然不明白为什么我需要您提到的模板字段/项目字段,以及如果需要在网格视图中将其关联到何处。请说清楚。谢谢
    • 您需要模板字段才能在 GridView 中显示图像。如果您愿意,也可以使用ImageField。请参阅编辑后的答案以了解如何使用 ImageField
    • 所以在 ASPX 中我把 然后在后面的代码中我关联 dr["Image "] = this.ImageNameColumn;我的操作正确吗?
    【解决方案2】:

    在网格视图中放置命令字段列,如下所示

    &lt;asp:CommandField runat="server" ShowDeleteButton="true" ButtonType="Image" DeleteImageUrl="images/delete.png" &gt;&lt;/asp:CommandField&gt;

    如下设置gridview属性

    AutoGenerateDeleteButton="false"

    【讨论】:

      【解决方案3】:

      另一种方法是在您的 DataGrid 中启用 RowDataBound 事件。然后在事件中为每个新行设置连接到您的图像。

      protected void GridView1_RowDataBound(object sender, GridViewRowWEventArgs e)
      {
          if(e.Row.RowType == DataControlRowType.DataRow)
          {
              //Setup in your image column index. By Example setting 0
              e.Row.Cells[0].Text=Server.HtmlDecode(@"<img src=""./Images/pdf.gif"" />");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 2011-07-28
        • 1970-01-01
        • 2012-10-29
        • 2023-04-04
        相关资源
        最近更新 更多