我是刚接触 .NET 的菜鸟。现在有个循环执行方面的问题,请指教!例如,现在有10条数据.想保存。
用CHECK BOX 选择其中一个 然后点保存。(如果按照这种方法来做的话一共要选择10次并点10次保存才能完成)
但是现在想实现,10条数据都先选上,然后点击保存键,也能实现10条都能保存的功能。(就是一个一个保存)用什么语句或方法来能实现呢?
谢谢大家~

解决方案 »

  1.   

    for(int i=0;i<10;i++)
    {
       //判断第i行的checkbox是否选中
       if(checkbox[i].Checked) //我不知道你具体用什么控件展现这10条数据,你根据你实际的情况来判断
       {
            //保存代码
             ...
       }
    }
      

  2.   

    实现两部分功能:
    1、实现CHECKBOX全选的功能,判断一下CHECKBOX的选中状态,未选中的使CHECKED=TRUE.......
    2、实现保存的功能,其实和你插入一条记录的道理是一样的,只是写一个循环
    用for循环一下就可以了
      

  3.   

    直接发 代码吧~呵呵
    protected void btnSave1_Click(object sender, ImageClickEventArgs e)
        {
            string ErrMsg = "";
            ZSLEL_RMS_WG_410_1_STable zrms = new ZSLEL_RMS_WG_410_1_STable();
            try
            {
                foreach (GridViewRow r in this.RealGridView1.Rows)
                {
                    ZSLEL_RMS_WG_410_1_S zrms_s = new ZSLEL_RMS_WG_410_1_S();
                    CheckBox chkItem = r.FindControl("chkItem") as CheckBox;
                    HiddenField RECEIPT_NO_HI = r.FindControl("RECEIPT_NO_HI") as HiddenField;
                    TextBox txtRmk = r.FindControl("txtRe") as TextBox;
                    if (chkItem.Checked == true)
                    {
                        zrms_s.Receipt_No = RECEIPT_NO_HI.Value;
                        zrms_s.Comp_Rmk = txtRmk.Text;
                        zrms.Add(zrms_s);
                    }
                }
                if (zrms.Count > 0 && checkSaveData(zrms))
                {
                    Wazeefdc.Components.ODS_SRW_410 d410 = new Wazeefdc.Components.ODS_SRW_410();
                    int Subrc = -1;
                    string Trs_Yn = "N";                d410.Update(Trs_Yn, ref zrms, out Subrc);
                    if (Subrc == 0)
                    {
                        ErrMsg = "保存成功!\\n" + "运输指示单号为:" + zrms.ToADODataTable().Rows[0]["receipt_no"];
                        AlertMessage(ErrMsg, this.udpMain);                    gridViewList.DataSource = Search(false).DefaultView;
                        gridViewList.DataBind();
                        this.KunnrHi.Value = "";
                        this.Loc1Hi.Value = "";
                        this.Trans_NoHi.Value = "";
                        this.CheckHi.Value = "";                    RealGridView1.DataSource = null;
                        RealGridView1.DataBind();
     }
                    else if (Subrc == 4)
                    {
                        ErrMsg = zrms.ToADODataTable().Rows[0]["comp_rmk"] + "\\n" + zrms.ToADODataTable().Rows[0]["receipt_no"];
                        AlertMessage(ErrMsg, this.udpMain);
                    }
                    else
                    {
                        ErrMsg = "保存时发生异常, 请重新保存.";
                        AlertMessage(ErrMsg, this.udpMain);
                    }
                }
                else
                {
                    if (zrms.Count == 0)
                    {
                        ErrMsg = "请先选择需要保存的数据.";
                        AlertMessage(ErrMsg, this.udpMain);
                    }
                }
            }
            catch
            {
                ErrMsg = "保存时发生异常, 请重新保存.";
                AlertMessage(ErrMsg, this.udpMain);
            }
        }
      

  4.   

    Update方法的代码发上来看看,单号是咋生成的
      

  5.   

     public string Update(string Trs_Yn, ref ZSLEL_RMS_WG_410_1_STable Zrms, out int Subrc)
            { 
                using ( 
                GerpMannager rfc = new GerpMannager()
                )
                {
                    try
                    {
                        rfc.connectSAP();
                        if (!rfc.connected())
                        {
                            throw new SAP.Connector.RfcSystemException("001", "Can not connect SAP.");
                        }
                        else
                        {
                            try
                            {
                                DataSet dsTables = new DataSet();
                                DataTable dtImport = null;
                                GerpMannager.setLogParams("Trs_Yn", Trs_Yn, ref dtImport);
                                dsTables.Tables.Add(Zrms.ToADODataTable());
                                GerpMannager.RfcLogSave("Zlel_Rms_W410_2", dtImport, dsTables);                            rfc.Proxy.Zlel_Rms_W410_2(Trs_Yn, out Subrc, ref Zrms);
                            }
                            catch  
                            {
                                Subrc = 1;
                                rfc.Proxy.RollbackWork(); 
                            }                        rfc.Proxy.CommitWork();
                        }
                    }
                    catch
                    {
                        Subrc = 1;
                    }
                    finally
                    {
                        rfc.disConnectSAP();
                        rfc.Dispose();
                    }
                }            return (Subrc == 0 ? "OK" : "Err");
            }
        }
    }
      

  6.   

    如果你那个单号是按读数据库最后记录来生成的话
    新单号 =生成单号().Substring(0,单号.length -1)+i;
    i在循环里++ 那样就能以次进10个新的号了。
    如果是别的形式生成的话,在循环里写个新的方法吧
      

  7.   

    HiddenField RECEIPT_NO_HI = r.FindControl("RECEIPT_NO_HI") as HiddenField;
    这个是你拿到的号,你直接就读datarow里的,说明你在生成那个datasource的时候里面就全一样的
    你现在要做的不过是重新组织下
    流水号  
    循环外 int i=1;
    里面 zrms_s.Receipt_No = (Convert.toint32(RECEIPT_NO_HI.Value)+i).tostring();
    i++;
    带字母,最后是数字的
    外面 string temp =RECEIPT_NO_HI.Value.Substring(RECEIPT_NO_HI.Value.length-数字的长度,RECEIPT_NO_HI.Value.length);
    int tempnum = Convert.toin32(temp )+1;
    循环里面
    zrms_s.Receipt_No = RECEIPT_NO_HI.Value.Substring(0,RECEIPT_NO_HI.Value.length-数字的长度)+tempnum。tostring();
    tempnum++;
      

  8.   

    现在关键是      zrms.Add(zrms_s);   这里,循环过程中 ADD 几条数据后保存。
    能不能ADD一条后保存,然后再次循环的时候把第一次ADD的 清除  然后保存    
      

  9.   

    我写的你如果看不懂,那么这个代码我看应该不是你写的,你是在改BUG或添加功能吧
    HiddenField RECEIPT_NO_HI = r.FindControl("RECEIPT_NO_HI") as HiddenField;
    从代码上看,你这个是拿单号,但更像是更新时才这么拿的
    zrms_s.Receipt_No = RECEIPT_NO_HI.Value;这个是给新记录赋单号
    那样的话按我上面的代码就能实现新的单号
    如果这个zrms_s.Receipt_No不是你要的单号,说明是在UPDATE方法里面给单号赋值的
    try
      {
      DataSet dsTables = new DataSet();
      DataTable dtImport = null;
      GerpMannager.setLogParams("Trs_Yn", Trs_Yn, ref dtImport);
      dsTables.Tables.Add(Zrms.ToADODataTable());这个看起来比较象
      GerpMannager.RfcLogSave("Zlel_Rms_W410_2", dtImport, dsTables);  rfc.Proxy.Zlel_Rms_W410_2(Trs_Yn, out Subrc, ref Zrms);
      }
    这里面去找下,哪个给单号赋值了,再去那里改
      

  10.   

    谢谢你的回复!
    对,这个代码不是我写的。 我是想添加这个功能的。呵呵
    zrms_s.Receipt_No 这个不是要的单号,这个是上面的数据。
    单号是 zrms.ToADODataTable().Rows[0]["receipt_no"]  这个。
    现在关键是 zrms.Add(zrms_s); 这里,循环过程中 ADD 几条数据后保存。
    能不能ADD一条后保存,然后再次循环的时候把第一次ADD的 清除 然后保存
      

  11.   

    去遍历那些checkbox 然后进行判断 选中的就保存
      

  12.   

     ZSLEL_RMS_WG_410_1_STable zrms = new ZSLEL_RMS_WG_410_1_STable();
    也放到循环里去new 每次就是新的了
    不过这个应该是笨办法,一次全加进去,然后只更新一次数据库是最好的。
    你不能在给zrms.ToADODataTable().Rows[0]["receipt_no"]赋值的地方改吗?
      

  13.   

    按笨办法做的话,你的update也要扔循环里去
      

  14.   

    先把显示的数据放到一个实体类的集合中,
    然后可以同Gridview显示数据,
    然后通过Gridview的rowdatabind事件先判断是否选中,
    然后添加数据,
    不用写循环,事件会自己循环
      

  15.   

    这个问题已经解决了。 放出来方案吧! 供大家学习及参考! 感谢上面回复我问题的朋友,也特别感谢ledmhcc!  谢谢大家~~  protected void btnSave1_Click(object sender, ImageClickEventArgs e)
        {
            string ErrMsg = "";
            int savecnt = 0;
            System.Text.StringBuilder sDocNos = new System.Text.StringBuilder();
            try
            {
                foreach (GridViewRow r in this.RealGridView1.Rows)
                {
                    CheckBox chkItem = r.FindControl("chkItem") as CheckBox;
                    HiddenField RECEIPT_NO_HI = r.FindControl("RECEIPT_NO_HI") as HiddenField;
                    TextBox txtRmk = r.FindControl("txtRe") as TextBox;
                    if (chkItem.Checked == true)
                    {
                        ZSLEL_RMS_WG_410_1_STable zrms = new ZSLEL_RMS_WG_410_1_STable();
                        ZSLEL_RMS_WG_410_1_S zrms_s = new ZSLEL_RMS_WG_410_1_S();
                        zrms_s.Receipt_No = RECEIPT_NO_HI.Value;
                        zrms_s.Comp_Rmk = txtRmk.Text;
                        zrms.Add(zrms_s);                    Wazeefdc.Components.ODS_SRW_410 d410 = new Wazeefdc.Components.ODS_SRW_410();
                        int Subrc = -1;
                        string Trs_Yn = "N";
                        d410.Update(Trs_Yn, ref zrms, out Subrc);
                        if (Subrc == 0)
                        {
                            sDocNos.AppendFormat("{0}, ", zrms.ToADODataTable().Rows[0]["receipt_no"]);
                            savecnt++;
                        }
                        else if (Subrc == 4)
                        {
                            ErrMsg = zrms.ToADODataTable().Rows[0]["comp_rmk"] + "\\n" + zrms.ToADODataTable().Rows[0]["receipt_no"];
                            AlertMessage(ErrMsg, this.udpMain);
                            return;
                        }
                        else
                        {
                            ErrMsg = "保存时发生异常, 请重新保存.";
                            AlertMessage(ErrMsg, this.udpMain);
                            return;
                        }
                    }
                }
                if (savecnt > 0)
                {
                    ErrMsg = "保存成功!\\n" + "运输指示单号为:" + sDocNos.ToString();
                    AlertMessage(ErrMsg, this.udpMain);                gridViewList.DataSource = Search(false).DefaultView;
                    gridViewList.DataBind();
                    this.KunnrHi.Value = "";
                    this.Loc1Hi.Value = "";
                    this.Trans_NoHi.Value = "";
                    this.CheckHi.Value = "";                RealGridView1.DataSource = null;
                    RealGridView1.DataBind();
                }
                else
                {
                        ErrMsg = "请先选择需要保存的数据.";
                        AlertMessage(ErrMsg, this.udpMain);
                }
            }
            catch
            {
                ErrMsg = "保存时发生异常, 请重新保存.";
                AlertMessage(ErrMsg, this.udpMain);
            }
        }