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

本文关键字:索引 异常 范围 gridview 绑定 | 更新日期: 2023-09-27 18:17:40

我在一个按钮单击事件绑定数据到gridview。绑定数据后,我正在检查用户是否为Admin。如果用户不是管理员,我想让一些列不可见。但是它抛出了'Index out of range exception'。下面是我的代码。

    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();
    }

我猜。我一定是漏掉了什么简单的东西。

我的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。所以,我认为数据没有问题。

谢谢

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

终于找到了

如果gridview autogeneratecollans ="true",那么gridview的列数总是为零。因此,我将其设置为false,并将所有列定义为asp:Boundfields。

显示数据表格列。在使用数据表

进行数据绑定后,Count总是0。

感谢大家的贡献

在使用它之前应该检查列数,以避免像这样的'Index out of range exception'

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

嗨,你在GridStaffBindData()中做什么?函数也许你的数据源仍然是空的,然后你得到异常