for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
        {
            DB db = new DB();
            CheckBox chk = (CheckBox)GridView1.Rows[i].FindControl("chkCheck");
           if (chk.Checked == true)
            {
                string Is_Audit = "通过审查";
               //int courseID =Convert.ToInt32(GridView1.DataKeys[GridView1.SelectedIndex].Value);
               string courseID = GridView1.DataKeys[e.RowIndex].Value.ToString();
  
         我在GridView空间里面添加了一个CheckBox,若选中该行(chk.Checked == true),则记录该行的关键字,
刚开始我用string courseID = GridView1.DataKeys。ToString(),出错,说是记录多行的关键字;
用string courseID = GridView1.DataKeys[e.RowIndex].Value.ToString()这个又越界!
请哪位高手帮忙指点一下。谢谢!
  

解决方案 »

  1.   

    GridView1.DataKeys[e.RowIndex].Values[0].ToString(); 
      

  2.   

    DataKeys算是个集合,1楼语法就可以,你可以再试。
      

  3.   

    protected void Button1_Click(object sender, EventArgs e)我是放在一个Button里面的!
      

  4.   

    我的建议是 给每一行加一个属性 比如 int i = 0; 然后脚本里面写 一个属性 Row=<%# i++%> 然后你的e.RowIndex 改为Row就可以了 
    提示:你可以把i绑定给一个控件
    你可以试试 平时我都是这么用的 没有用过e.RowIndex
      

  5.   

    前台GridView中放一个Literal控件:<asp:Literal ID="lblID" Runat ="server" Text='<%# Eval("couseID")%>'></asp:Literal>后台:
    Literal lblID = (Literal)GridView1.Rows[i].FindControl("lblID");
    string courseID = lblID.ToString();
      

  6.   

     protected void button1_Click(object sender, EventArgs e)
        {
            
            string sb=string.Empty;
            
            for(int i=0;i<this.GridView1.Rows.Count;i++)
            {
                CheckBox cb=(GridView1.Rows[i].FindControl("book"))as CheckBox;
                if(cb.Checked==true)
                {
                  
                        sb += (GridView1.Rows[i].FindControl("lblBook") as Label).Text + ",";
                   
                }
            }给楼主参考一下
      

  7.   

    关于 GridView1.DataKeys的用法还是不懂。。版主还是把我上面的回贴删了吧
      

  8.   

    首先先把gridview中的控件模板化,然后你在相应的控件中添加 CommandArgument="<%# Container.DataItemIndex %>属性
    之后在调用的时候可以System.Convert.ToInt32(e.CommandArgument.ToString())将值调出,前提条件是使用这个事件GridViewCommandEventArgs e
      

  9.   

       protected void CheckAll(object sender, EventArgs e)//select all
        {
            CheckBox cbx = (CheckBox)sender;
            foreach (GridViewRow gvr in GridViewxz.Rows)
            {
                CheckBox ch = (CheckBox)gvr.FindControl("ItemCheckBox");
                ch.Checked = cbx.Checked;
            }
        }
      

  10.   

    应该在RowDataBind()里面写:
     protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
    //代码写在这里面试试看。
                string str=grid.DataKeys[e.Row.RowIndex].Value.ToString().Trim();
            }
        }