从代码后面隐藏GridView中的列

本文关键字:GridView 隐藏 代码 | 更新日期: 2023-09-27 17:53:26

我的页面中有一个gridview,我必须从后面的代码设置(某些列有时不包括在内),但其中一列包含超链接。我目前正在设置。aspx页面中的gridview和超链接列,如下所示:

 <asp:GridView runat="server"  ID="GridView1" >
    <Columns>
        <asp:BoundField DataField="Edit" HtmlEncode="false" HeaderText="" HeaderStyle-Wrap="false" SortExpression="Edit" />
    </Columns>
 </asp:GridView>

我在后面的代码中绑定了其余的数据:

GridView1.DataSource = dt;           
GridView1.DataBind();         
Page.DataBind();

链接列显示良好,链接按预期工作。然而,创建的GridView在左侧有链接列,所有我想显示的列,然后在右侧的另一列包含链接字符串,如下所示:

<a href='ForecastComments.aspx?zip=49905&date=1day'>Edit

是否有一种方法,我可以摆脱这列,但仍然有我的链接列?我不能从表中删除它,因为我需要为link列访问它。我试着把后面的代码改成这样:

GridView1.DataSource = dt;           
GridView1.DataBind();            
this.GridView1.Columns[12].Visible = false;
Page.DataBind();

因为我不想显示的列是列12,但在gridview列的数量显然只有1(不知道为什么),所以无论如何,它没有工作。额外的好处:我宁愿把链接列放在表的右边,而不是左边——如果有人知道如何做到这一点,那就太棒了。

从代码后面隐藏GridView中的列

可以在GridView的RowDataBound事件中移动和/或删除单元格。您可以在标记中设置事件处理程序:

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">

在代码隐藏中,定义一个变量来保存要删除的链接列的索引:

private int LinkColIndex;

并在将数据绑定到GridView之前从DataTable中获取其值:

LinkColIndex = dt.Columns["Edit"].Ordinal;
GridView1.DataSource = dt;           
GridView1.DataBind();

最后,在RowDataBound事件处理程序中处理每行的单元格:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    TableCell cell = e.Row.Cells[0];
    e.Row.Cells.RemoveAt(0);
    e.Row.Cells.RemoveAt(LinkColIndex);
    e.Row.Cells.Add(cell);
}