绑定后使gridview列不可见 - 索引超出范围异常

时间:2014-08-12 09:20:58

标签: c# asp.net gridview data-binding indexoutofrangeexception

我在按钮点击事件中将数据绑定到gridview。绑定数据后,我正在检查用户是否是管理员。如果用户不是管理员,我想让一些列不可见。但它正在使指数超出范围异常'。以下是我的代码。

    protected void btn_Click(object sender, EventArgs e)
    {
        GridStaffBindData();

        sqlCon.Open();
        SqlCommand checkAdminCmd = new SqlCommand("query", sqlCon);
        object admin = checkAdminCmd.ExecuteScalar();
        if(admin == null)
        {
          gridStaff.Columns[0].Visible = false; //throwing exception here
        } 
        sqlCon.Close();
    }

我猜。 tt必须是我在这里缺少的简单。

我的GridStaffBind函数非常简单。我不认为这是一个问题。无论如何,下面是代码。

    private void GridStaffBindData()
    {
        sqlCon.Open();

        string sqlCommand = "select command";
        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(sqlCommand, sqlCon);
        da.Fill(dt);

        sqlCon.Close();

        gridStaff.DataSource = dt;
        gridStaff.DataBind();
    }

当我评论该异常代码行时,数据完全绑定到gridview。所以,我认为数据没有错误。

由于

3 个答案:

答案 0 :(得分:1)

终于找到了它。

如果gridview autogeneratecolumns =" true",则gridview列计数始终为零。所以,我将其设置为false并将所有列定义为asp:Boundfields。

GridView Column.Count is always 0 after databind with a datatable

感谢您的贡献

答案 1 :(得分:0)

您应该在使用之前检查列数,以避免索引超出范围异常'像这样

   if(admin == null && gridStaff.Columns.Count>0)
    {
      gridStaff.Columns[0].Visible = false; //throwing exception here
    } 

答案 2 :(得分:0)

你在GridStaffBindData()中做什么功能 也许你的数据源仍然是空的然后你得到例外。