gridview隐藏列

问题描述:

我有gridview,我想隐藏数据绑定到gridview后的列,但我得到下面的错误。gridview隐藏列

“索引超出范围必须大于集合的大小非负少 参数名:索引”

我的C#代码如下,

protected void grid_all_posts_DataBound(object sender, EventArgs e) 
{ 
    if (grid_all_posts.Columns[1].Visible) 
    { 
     grid_all_posts.Columns[1].Visible = false; 
    } 
} 

// Read all posts and fill gridview 
    ////////////////////////////////////////////////// 
    DbCommand dbCommand2; 
    dbCommand2 = db.GetStoredProcCommand("SP_Select_News"); 
    db.AddInParameter(dbCommand2, "UserId", DbType.Guid, new Guid(Session["UserId"].ToString().Trim())); 
    DataSet ds = db.ExecuteDataSet(dbCommand2); 
    grid_all_posts.DataSource = ds; 
    grid_all_posts.DataBind(); 
    ////////////////////////////////////////////////// 

我的ASPX代码,

<asp:gridview runat="server" ID="grid_all_posts" OnRowDataBound="grid_all_posts_DataBound"></asp:gridview> 

您认为问题是什么?如何隐藏第一列

+0

Proc SP_Select_News返回...的列数? – Pandian 2013-02-11 16:08:03

+0

它返回6列 – 2013-02-11 16:09:14

+0

添加一些代码......尝试...... – Pandian 2013-02-11 16:14:09

尝试像下面将工作....

DbCommand dbCommand2; 
    dbCommand2 = db.GetStoredProcCommand("SP_Select_News"); 
    db.AddInParameter(dbCommand2, "UserId", DbType.Guid, new Guid(Session["UserId"].ToString().Trim())); 
    DataSet ds = db.ExecuteDataSet(dbCommand2); 
    grid_all_posts.DataSource = ds; 
    grid_all_posts.DataBind(); 

**//after Databind Write the below code** 

    if (grid_all_posts.Columns.Count > 0) 
     grid_all_posts.Columns[0].Visible = false; 
    else 
    { 
     grid_all_posts.HeaderRow.Cells[0].Visible = false; 
     foreach (GridViewRow gvr in grid_all_posts.Rows) 
     { 
      gvr.Cells[0].Visible = false; 
     } 
    } 
+0

这里的VB版本的Pandian代码如果dgvMyLeave.Columns.Count> 0,则 dgvMyLeave.Columns(0)。可见=假 否则 dgvMyLeave。 HeaderRow.Cells(0).Visible = False 对于每个gvr As GridViewRow在dgvMyLeave.Rows中 gvr.Cells(0).Visible = False Next End If – DJDave 2014-03-04 09:47:54

为一个简单的和通用的方法已被窃听我的年龄 - 这不需要任何形式的列计数,我最终今天发现它; DataControlFieldCell.ContainingField.HeaderText

Private Sub GridView_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView.RowDataBound 

    For Each r As GridViewRow In GridView.Rows 

     If r.RowType = DataControlRowType.DataRow Then 
      For Each c As DataControlFieldCell In r.Cells 

       Dim h As String = c.ContainingField.HeaderText 
       If h <> "ColumnName" Then c.ContainingField.Visible = False 
       If IsNumeric(c.Text) Then c.Text = Format(CInt(c.Text), "#,##0") 

      Next 
     End If 

    Next 

End Sub 

我遍历DataControlFieldCells正如我在我的领域执行上的值进行一些格式化,以及(如上图所示),但你可以只通过头环我想象一下,如果你想进一步削减下来仍。

请参阅msdn了解更多详情。