我在按钮点击事件中将数据绑定到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。所以,我认为数据没有错误。
由于
答案 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()中做什么功能 也许你的数据源仍然是空的然后你得到例外。