如何在DataBind之后隐藏GridView中的列?

时间:2015-06-29 17:22:40

标签: c# asp.net gridview data-binding

我问这个问题,因为我认为我有不同的问题: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”的值。

谢谢!

1 个答案:

答案 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属性仅存储显式声明的列。您可以隐藏包含每行绑定时不需要的列的单元格,而不是隐藏列。似乎应该有更好的方法来处理这个问题,但除了使用明确声明的列之外,我不会知道一个。