当前位置:编程学习 > C#/ASP.NET >>

我靠,见鬼了,GridView获取DataKeys值的问题.


在page_load部分直接

Response.Write(gv_Info.DataKeys[0].Value.ToString()); ,这样可以得到这个gridview的0行DataKeys值

但是我把这一句放到一个button里居然就提示错误

索引超出范围。必须为非负值并小于集合大小。
参数名: index 


行 54:         {
行 55:            Response.Write(gv_Info.DataKeys[0].Value.ToString());
行 56:         }
行 57: 

为什么会这样?
易做图,真的见鬼了.高人帮忙。
--------------------编程问答-------------------- 哦。。。。。。。。。。好久不写代码了
首先应该是超边界了 --------------------编程问答-------------------- 都说了,在pageload部分这句测试不会出错,而且可以正常获得的,但是放到button的click事件里执行就出错了 --------------------编程问答-------------------- 你什么时候加载gv_Info数据,如果在pageload,那么在加载前面加ispostback看看 --------------------编程问答-------------------- if(!IsPostBack)
   加载数据代码 --------------------编程问答-------------------- 加了 --------------------编程问答-------------------- Response.Write(gv_Info.DataKeys[0].Value.ToString()); 
之前先判断一下gv_Info是否有数据 --------------------编程问答-------------------- protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                new BLL.MyControls().MyColDrop(drop_College);
                new BLL.MyControls().MyHelpDrop(drop_Nj, "003");
                new BLL.MyControls().MyClassXSHNJ(drop_Class, drop_College.SelectedValue, drop_Nj.SelectedValue);
                this.Bind();
            }
        }

        protected void drop_College_SelectedIndexChanged(object sender, EventArgs e)
        {
            new BLL.MyControls().MyClassXSHNJ(drop_Class, drop_College.SelectedValue, drop_Nj.SelectedValue);
            this.Bind();
        }

        protected void drop_Nj_SelectedIndexChanged(object sender, EventArgs e)
        {
            new BLL.MyControls().MyClassXSHNJ(drop_Class, drop_College.SelectedValue, drop_Nj.SelectedValue);
            this.Bind();
        }


        protected void drop_Class_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Bind();
        }
        private void Bind()
        {
            gv_Info.DataSource = new BLL.JJ_SubInfo().GetInfoList(drop_Class.SelectedValue, (string)Application["AdYear"], (string)Application["AdNum"]);
            gv_Info.DataBind();
        }

        protected void btn_AllChoose_Click(object sender, EventArgs e)
        {
           new BLL.MyControls().MyCkbAllChoose(btn_AllChoose, gv_Info, "cb_Choose");
        }

        protected void btn_Del_Click(object sender, EventArgs e)
        {

            for(int i=0;i<gv_Info.Rows.Count;i++)
            {
                CheckBox ckb = (CheckBox)this.gv_Info.Rows[i].FindControl("cb_Choose");
                if (ckb.Checked)
                {
                    string strDelId = (string)gv_Info.DataKeys[i].Value;
                    new BLL.JJ_SubInfo().Delete(strDelId);
                    Response.Write("<script>alert('数据删除成功!');</script>");
                }

            }
            this.Bind();
        }

代码我给出来,bind是肯定有数据的,在批量删除的时候出现错误,button里的(string)gv_Info.DataKeys[i].Value;出错 --------------------编程问答-------------------- gv_Info.Rows.Count-1 --------------------编程问答-------------------- ......................-1干什么,这里获得的行是正确的。..跟这个完全没有关系.
我都说了,在pageload部分是正确的,在button的click里才会错。........... --------------------编程问答-------------------- 终于发现原因了,写在 .ascx里,并且动态加载的控件,忘记给赋值ID了。无语. --------------------编程问答-------------------- ID没值
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,