我问这个问题,因为我认为我有不同的问题:How to hide gridview column after databind?
我的gridview包含来自数据库的数据。我没有在我的代码中设置任何“td”,但是html将gridview更改为table并且具有“td”。问题是,我不希望页面上显示单元格或“td”,我只想在单元格中接收数据以在数据库中显示图像。
这是从数据库中检索数据的代码:
public static DataTable FetchAllImagesInfo(int id)
{
string sb = "Select img_content, Img_id, csrid FROM images WHERE Img_Id = " + id + ";";
SqlConnection conn = DatabaseFactory.GetConnection();
SqlDataAdapter da = new SqlDataAdapter(sb, conn);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
这是绑定GridView的代码隐藏,在这里我尝试将Visible设置为true或false,但它不起作用。我手动设置列索引,因为它只有3列:
GridView1.DataSource = ProductAllLocationCatalog.FetchAllImagesInfo(_id);
GridView1.DataBind();
GridView1.Columns[0].Visible = true;
GridView1.Columns[1].Visible = false;
GridView1.Columns[2].Visible = false;
而且,这是我的aspx代码:
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField runat="server">
<ItemTemplate runat="server">
<asp:Image ID="image1" runat="server" ImageUrl='<%#"Handler.ashx?csrid="+Eval("csrid") %>' style="max-height:400px; max-width:940px; text-align:center; margin:auto; display:block;" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我只需要数据库中的图像,而不是其他图像。但是如果我只选择图像,gridview不能做DataBind(),而且我无法获得“csrid”的值。
谢谢!
答案 0 :(得分:1)
尝试
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[1].Visible = false;
e.Row.Cells[2].Visible = false;
}
我认为问题在于您的GridView会自动生成列,而GridView.Columns属性仅存储显式声明的列。您可以隐藏包含每行绑定时不需要的列的单元格,而不是隐藏列。似乎应该有更好的方法来处理这个问题,但除了使用明确声明的列之外,我不会知道一个。