将图像加载到Gridview

时间:2013-12-17 22:13:17

标签: c# asp.net gridview datareader

我一直试图弄清楚这一点。我试图用3列中的SQL数据加载GridView,然后动态地将图像添加到第4列。来自SQL的数据加载正常,但无论我做什么,我都无法加载图像。这是我的代码:

SqlCommand cmd1 = new SqlCommand("StoredProc", myConnection1);
cmd1.CommandType = CommandType.StoredProcedure;
SqlDataReader reader = cmd1.ExecuteReader();
while (reader.Read())
{
     if (reader["ServiceStatus"].ToString().ToLower() == "stopped")
     {
          ImageField status = new ImageField();
          status.HeaderText = "Status";
          status.Visible = true;
          GridView1.Columns.Add(status);
          status.DataAlternateTextFormatString = @"~/Images/Image.gif";
     }

     GridView1.DataSource = reader;
     GridView1.DataBind();
}

我已经尝试过创建数据表并填充它,但它仍然无效。我知道必须有一个简单的方法来做到这一点。我错过了什么?

编辑:

我现在正在使用TemplateField,我正在显示一个默认图像:

<asp:TemplateField HeaderText="Status">
     <ItemTemplate>
          <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/greydot.jpg"/>
     </ItemTemplate>
</asp:TemplateField>

那么为了改变那个图像,我应该如何在我的代码中引用这个ImageURL?图像存储在解决方案中而不是SQL中。

2 个答案:

答案 0 :(得分:1)

您可以将路径存储在数据库中,也可以动态地为相应的Image提供路径。像这样:

ImageUrl='<%#Eval("ProductImage")

答案 1 :(得分:0)

protected void gvUserProfile_DataBound(object sender, EventArgs e) 
{
    if ( e.Row.RowType == DataControlRowType.DataRow ) 
    {
        // set reference to current data record 
        // use IDataRecord if you bind to a DataReader, and DataRowView if you bind to a DataSet
        DataRowView dataRow = ( DataRowView ) e.Row.DataItem;
        string myflag = dataRow [ "yourColumnNameHere" ].ToString ( );
        if ( myflag == "0" ) 
        {
            // do something amusing here
        }
    }
}

2 - 如果在RowDataBound上实例化任何新控件(例如ImageButton),则必须将实例化控件添加到单元格的Controls集合中。像

这样的东西
e.Row.Cells [ 0 ].Controls.Clear ( );
ImageButton img = new ImageButton ( );
img.ImageUrl = "~/images/editGray.gif";
e.Row.Cells [ 0 ].Controls.Add ( img );