0

我在按钮单击事件中将数据绑定到 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。所以,我认为数据没有错。

谢谢

4

3 回答 3

2

终于找到了。

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

与数据表进行数据绑定后,GridView Column.Count 始终为 0

谢谢你们的贡献

于 2014-08-12T10:25:58.197 回答
0

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

   if(admin == null && gridStaff.Columns.Count>0)
    {
      gridStaff.Columns[0].Visible = false; //throwing exception here
    } 
于 2014-08-12T09:30:00.763 回答
0

嗨,你在 GridStaffBindData() 中做什么;功能可能您的数据源仍然为空,然后您会遇到异常。

于 2014-08-12T09:32:00.393 回答