【发布时间】:2014-08-12 09:20:58
【问题描述】:
我在按钮单击事件中将数据绑定到 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。所以,我认为数据没有错。
谢谢
【问题讨论】:
-
你能显示 GridStaffBindData() 的代码吗?看起来 gridStaff 尚未填充,因此索引 0 处没有列,因此出现异常。
-
嗨,用 GridStaffBindData 功能更新了我的代码
-
您是否检查过 dt 是否包含数据?如果这是空的,那么 gridStaff 也将是空的,因此在索引 0 处没有列。
-
另外,你到底是怎么想的 string slqCommand = "select command";在做什么?
-
这里发生了一些奇怪的事情。我注释了问题代码行并开始调试。 'dt' 没有数据。然后我接受查询并在 SSMS 中执行,它在那里显示了一些数据。我按 F5 查看最终结果,gridview 绑定了数据。发生了什么??啊
标签: c# asp.net gridview data-binding indexoutofrangeexception