ASP.NET 2.0 GridView隐藏列的问题显示在Postback上

时间:2010-01-15 12:40:31

标签: c# .net asp.net visual-studio-2005

请帮助, 我有用户控件,其中包含GridView,我在GridView RowCreated事件中隐藏其列:

    private void gvGrid_RowCreated(object sender, GridViewRowEventArgs e)
    {

                foreach (TableCell objCell in e.Row.Cells)
                {
                   if (objCell is DataControlFieldHeaderCell)
                    {
                            objCell.Visible = false;
                    }
                }

    }

现在一切正常,但是在ASPX Page Postback(包含Griview UserControl)上,显示了所有隐藏的列,我的PageLoad如下所示

         protected void Page_Load(object sender, EventArgs e)
         {
               if (!IsPostBack)
               {
               ucGridView.PopulatePage();
               }
          }

注意:如果我删除,ASPX页面开始正常工作!IsPostBack Check ..但我不想要这个...问题是什么......!

4 个答案:

答案 0 :(得分:2)

您需要使用RowDataBound事件处理程序而不是RowCreated。

答案 1 :(得分:1)

您确定需要在代码隐藏中隐藏列吗?

如果您只需要在网格中存储字段值但不显示它们,那么GridView控件的Microsoft recommends using the DataKeyNames property就会显示。

您可以直接从GridView中删除绑定字段,并在DataKeyNames属性中指定它们,而不是使用代码隐藏来隐藏某些列:

<asp:GridView ID="GridView1" runat="server" 
        DataKeyNames="SalesOrderID,SalesOrderDetailID"
        DataSourceID="LinqDataSource1">

这样,字段不会显示给用户,但GridView知道要保留值以进行更新等。

答案 2 :(得分:1)

默认情况下,您的列在网格中可见,而您在页面未回发时隐藏

 if (!IsPostBack)
  {
        ucGridView.PopulatePage();
  }

所以

technically ucGridView.PopulatePage(); is only beign called once thats why when you remove 
!IsPostBack is works fine.

答案 3 :(得分:0)

如果在RowDataBound中使用,则无法访问gridview列值

相关问题