从代码后面隐藏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的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);
}