从Code Behind隐藏GridView中的列

时间:2016-06-30 19:59:55

标签: c# asp.net gridview

我的页面中有一个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

有没有办法可以摆脱这个专栏,但仍然有我的链接列?我无法从表中删除它,因为我需要访问链接列。我尝试将后面的代码更改为:

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

因为我不想显示的列是第12列,但gridview中的列数显然只有1(不知道为什么会这样),所以无论如何,它都不起作用。额外奖励:我宁愿在桌子右边有链接栏,而不是左边 - 如果有人知道怎么做,那就太棒了。

1 个答案:

答案 0 :(得分:2)

可以在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);
}