我的页面中有一个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(不知道为什么会这样),所以无论如何,它都不起作用。额外奖励:我宁愿在桌子右边有链接栏,而不是左边 - 如果有人知道怎么做,那就太棒了。
答案 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);
}