繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM