在显示模式下我隐藏了某一列,想在编辑模式下显示该列。但不知为什么之前隐藏的列还是无法显示,请问这是为什么?
代码如下:
if (e.Row.RowType == DataControlRowType.DataRow)
{ this.GvProduct.Columns[3].Visible = false;//隐藏列
}
if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit))
{
this.GvProduct.Columns[3].Visible = true;//显示该列
e.Row.Cells[3].Visible = true;//这样写也不行
}
以上问题解决了:
我在页面放置了一个按钮,点击事件可以显示隐藏列。于是乎我想在编辑状态下执行按钮点击事件 所以只需添加this.Button1.Click += new System.EventHandler(this.Button1_Click); 运行以后还是没有效果。
在网上查了下资料有人说当把控件设置为Visible 是很难将该对象设置回来的。查看源代码发现也确实如此,源代码中并没有所需要隐藏列的数据。当时我想最好的方法就是利用JS去实现隐藏与显示了。但我并没有死心,继续求解,我换了个思路解决了此问题。代码如下:
<asp:TemplateField HeaderText="显示隐藏列" ShowHeader="False" Visible="False">
<EditItemTemplate>
<asp:DropDownList ID="ddlname" runat="server">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
也就是说不用代码控制隐藏,直接像上面那样写。后台代码只需在编辑状态下加上
this.GvProduct.Columns[n].Visible = true; //n为要隐藏显示的列需要 从0开始
这里要注意一下:e.Row.Cells[3].Visible = true;是没有任何效果的,原因是前台设置的 ShowHeader="False" Visible="False"是对整列设置,所以对应后台也应该使用this.GvProduct.Columns[n].Visible = true;设置整个列可见。
当然点击取消还应该隐藏列 所以在GridView取消事件中还应该隐藏列