protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        string xjg=this.TextBox1.Text;
        foreach (GridViewRow gr in GridView1.Rows)
        {
            CheckBox lb1 = (CheckBox)gr.FindControl("CheckBox1");
            if (lb1.Checked=true)
            {
               strSql = "Update sc_gj set fy='" + xjg + "' where gjid=" + dtTable.Rows[0]["gjid"].ToString() + "";
                shuju.ExcuteSql(strSql);
            }
            
        }
           }
GridView1控件中有CheckBox,我想批量修改我选中的其fy的值 ,但结果是我点击按钮时,出现的是它把我所有的CheckBox全部都选中,修改了第一条数据

解决方案 »

  1.   

    不要用foreach用for定义一个i,每循环一次修改一次值
      

  2.   

    if (lb1.Checked=true)if (lb1.Checked==true)
      

  3.   

      protected void ImageButton1_Click(object sender, ImageClickEventArgs e) 
        { 
            string xjg=this.TextBox1.Text;
            string strSql="";  
            foreach (GridViewRow gr in GridView1.Rows) 
            { 
                CheckBox lb1 = (CheckBox)gr.FindControl("CheckBox1"); 
                if (lb1.Checked=true) 
                { 
                  strSql += "Update sc_gj set fy='" + xjg + "' where gjid=" + dtTable.Rows[0]["gjid"].ToString() + ";"; 
                  } 
                
            } if(strSql!=""){
          shuju.ExcuteSql(strSql); }
        }
      

  4.   

    先把所有的sql叠加起来 最后写个事务 一起执行 像你用的哪种方法速度超级慢。
      

  5.   

    CheckBox lb1 = (CheckBox)gr.FindControl("CheckBox1"); 
    这样的话只能找到checkbox1吧,所以只修改了这一个
      

  6.   

    上面说错了
     strSql = "Update sc_gj set fy='" + xjg + "' where gjid=" + dtTable.Rows[0]["gjid"].ToString() + ""; 

    看这句sql只会改变一次数据库啊
    dtTable.Rows[i]["gjid"].ToString() 
      

  7.   

       if (lb1.Checked=true) 

       if (lb1.Checked==true) 
      

  8.   

    我把他改成这样也还是不行
     for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                CheckBox lb1 = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
                if (lb1.Checked== true)
                {
                    strSql = "Update sc_gj set fy='" + xjg + "' where gjid=" + dtTable.Rows[i]["gjid"].ToString() + "";
                    shuju.ExcuteSql(strSql);
                }        }
      

  9.   

     for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
            {
                CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
                if (cbox.Checked == true)
                {               strSql = "Update sc_gj set fy='" + xjg + "' where gjid=" + dtTable.Rows[i]["gjid"].ToString() + ""; 
                    shuju.ExcuteSql(strSql); 
               }
            } 
      

  10.   

    一般是用,号拼接sql语句,最后执行一次即可
      

  11.   

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            string xjg=this.TextBox1.Text; 
            string whereClause = string.Empty;
            CheckBox chk;
            foreach (GridViewRow r in GridView1.Rows)
            {
                chk = (CheckBox)r.FindControl("CheckBox1");
                if (chk != null)
                {
                    if (chk.Checked)
                    {
                        if (whereClause == string.Empty)
                            whereClause += "'" + GridView1.DataKeys[r.RowIndex].Value.ToString() + "'";
                        else
                            whereClause += ",'" + GridView1.DataKeys[r.RowIndex].Value.ToString() + "'";
                    }
                }
            }
            if (whereClause != string.Empty)
            {
                SqlConnection cn = new SqlConnection(@"server=.\SQLExpress;uid=sa;pwd=sa;database=pubs");
                //假设你的gjid为数字类型字段
                string strSQL = ""Update sc_gj set fy='" + xjg + "' where gjid in (" + whereClause + ")";
                SqlCommand cmd = new SqlCommand(strSQL, cn);
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }
            //下面重新绑定GridView
            BindGrid();
        }
      

  12.   

    补充一下,你的GridView1应该要设置 DataKeyNames属性为你表的主键,据我猜测就是gjid也就是有
    <asp:GridView id="GridView1" runat="server" DataKeyNames="gjid"
    ...
      

  13.   


               string strSQL = ""Update sc_gj set fy='" + xjg + "' where gjid in (" + whereClause + ")";
                SqlCommand cmd = new SqlCommand(strSQL, cn);
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
    这个才是最关键的部分;
    SqlCommand是不能循环使用的,除非在dataread关闭后!
      

  14.   

    这是所有非嵌入式sql开发语言的通病!
      

  15.   

    你加我QQ,我把代码发给你吧。我这有,保证成功的
    704174307,注明CSDN
      

  16.   

     whereClause += "'" + GridView1.DataKeys[r.RowIndex].Value.ToString() + "'";
    没有值  还是为空  ~!我测试了
      

  17.   

    不要用foreach用for定义一个i,每循环一次修改一次值  up
      

  18.   

    没有值的话
    !page.isPostBack
    有没有的啊 
    我的神啊
      

  19.   

    你是把FY给设为一个相同的值吗?
     protected void ImageButton1_Click(object sender, ImageClickEventArgs e) 
        { 
            string xjg=this.TextBox1.Text;
            string idList="不可能的ID";
            foreach (GridViewRow gr in GridView1.Rows) 
            { 
                CheckBox lb1 = (CheckBox)gr.FindControl("CheckBox1"); 
                if (lb1.Checked=true) 
                { 
                  idList+=",";
                  idList+=dtTable.Rows[0]["gjid"].ToString();
                } 
                
            } 
            string strSql="update sc_gj set fy='"+xjg+"' where gjid in ("+idList+")";
            shuju.ExcuteSql(strSql);    }
    不知道这样写对不对
      

  20.   

      急求:本人欲在傲游(Maxthon)浏览器的工具栏上安装一个自定义按钮,该按钮的功能是:当我按下该按钮时,启动d:\euro\hot.exe程序(该程序功能是:在当前网页中,搜索关键字,并将搜索结果及相关字段内容存入名为Asia2008.dbf数据库中,关闭当前网页)。请各位大侠指点做法,如有可能给出相关源程序,小生万分感谢!([email protected])