我一直试图弄清楚这一点。我试图用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中。
答案 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 );