[英]How to hide column in GridView after DataBind?
我问这个问题是因为我认为我对此有不同的问题: 如何在数据绑定后隐藏 gridview 列?
我的 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”的值。
谢谢!
尝试
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[1].Visible = false;
e.Row.Cells[2].Visible = false;
}
我认为问题在于您的 GridView 会自动生成您的列,而 GridView.Columns 属性仅存储显式声明的列。 您可以在绑定每一行时隐藏包含不需要的列的单元格,而不是隐藏列。 似乎应该有更好的方法来处理这个问题,但除了使用显式声明的列之外,我不知道一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.