none
【ASP.NET】GridView编辑模式下如何显示被隐藏的列 RRS feed

  • 问题

  • 在显示模式下我隐藏了某一列,想在编辑模式下显示该列。但不知为什么之前隐藏的列还是无法显示,请问这是为什么?

    代码如下:

    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;//这样写也不行
    }

    • 已移动 孟宪会Moderator 2010年9月17日 8:06 (发件人:.NET Framework 一般性问题讨论区)
    2010年9月17日 3:58

答案

  • 在显示模式下我隐藏了某一列,想在编辑模式下显示该列。但不知为什么之前隐藏的列还是无法显示,请问这是为什么?

    代码如下:

    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取消事件中还应该隐藏列

    • 已标记为答案 jinwb1982 2010年9月17日 8:51
    2010年9月17日 8:51