Code Bye

gridview隐藏某一列,提示索引超出范围 必须为非负值并小于集合大小

下面是报错的截图和代码,设置行的时候不会出错,列的时候为什么就不对呢??

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class kaguanyuan : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        

        Label1.Text = (Session["dengluS"] as userinfo).Jiebie;
        Label2.Text = (Session["dengluS"] as userinfo).Nianji;
        Label3.Text = (Session["dengluS"] as userinfo).Banji;

        string strCon = "Integrated Security=SSPI;initial catalog=studentcard;data source=.*************";
        string sqlstr = "select * from [studentcard].[dbo].[studentcard] where [届别] = " + (Session["dengluS"] as userinfo).Jiebie +
                                                                          "and [班级] = " + (Session["dengluS"] as userinfo).Banji + 
                                                                         " and [年级] ="" + (Session["dengluS"] as userinfo).Nianji +""";
        SqlConnection sqlcon = new SqlConnection(strCon);
        SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
        DataSet myds = new DataSet(); 
        sqlcon.Open(); 
        myda.Fill(myds);
        //myda.Fill(myds, "tb_Member");
        bukagv.DataSource = myds;
        bukagv.DataKeyNames = new string[] { "检索号" }; 
        bukagv.DataBind();
        sqlcon.Close();
        bukagv.Rows[0].Visible = false;
        bukagv.Columns[0].Visible = false;
        
    }
 
}

5分
参考这个:
http://www.cnblogs.com/insus/archive/2013/05/09/3068141.html

引用 1 楼 insus 的回复:

参考这个:
http://www.cnblogs.com/insus/archive/2013/05/09/3068141.html

没有找到答案,,,,,

引用 2 楼 xpxpxpxp 的回复:
Quote: 引用 1 楼 insus 的回复:

参考这个:
http://www.cnblogs.com/insus/archive/2013/05/09/3068141.html

没有找到答案,,,,,

例子都给你了 ,没找到答案,太无语了。


5分
判断   是否回传  试试
引用 4 楼 duanzi_peng 的回复:

判断   是否回传  试试

哦,没说清楚,行已经有值了,列没有,很奇怪啊,行执行成功了,列的不成功
bukagv.Rows[0].Visible = false;
bukagv.Columns[0].Visible = false;


5分
引用 5 楼 xpxpxpxp 的回复:
Quote: 引用 4 楼 duanzi_peng 的回复:

判断   是否回传  试试

哦,没说清楚,行已经有值了,列没有,很奇怪啊,行执行成功了,列的不成功
bukagv.Rows[0].Visible = false;
bukagv.Columns[0].Visible = false;

他说的判断回传是说你程序应该判断一下是回传的还是第一次加载的!我记得有一个判断,但是忘了具体是什么,但是我觉得应该不是这个问题

不太明白回传的意思,,这应该是第一次加载吧

5分
假如你gridview只有一行数据,你隐藏了第一行所有的数据,那第一列还有数据吗?
引用 8 楼 u010349035 的回复:

假如你gridview只有一行数据,你隐藏了第一行所有的数据,那第一列还有数据吗?

不是这个原因,测试过不加隐藏行也不行,而且有很多数据,


5分
索引。是从0开始的。GridView1.DataKeys[0]代表第一个数据GridView1.DataKeys[GridView1.DataKeys.count -1]代表最后一个数据。当然GridView1.DataKeys.count -1要大于0
引用 10 楼 hhy603757054 的回复:

索引。是从0开始的。GridView1.DataKeys[0]代表第一个数据GridView1.DataKeys[GridView1.DataKeys.count -1]代表最后一个数据。当然GridView1.DataKeys.count -1要大于0

这个我知道,,你说的是关键字吗?


15分
俺觉得你设置隐藏列,不该在绑定函数那里弄吧,你去GridView1_RowDataBound里设置啊
引用 12 楼 yangmingxing980 的回复:

俺觉得你设置隐藏列,不该在绑定函数那里弄吧,你去GridView1_RowDataBound里设置啊

protected void bukagv_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Visible = false;
e.Row.Cells[1].Visible = false;
}
恩,正解,在网上找到代码了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明gridview隐藏某一列,提示索引超出范围 必须为非负值并小于集合大小