我是刚接触 .NET 的菜鸟。现在有个循环执行方面的问题,请指教!例如,现在有10条数据.想保存。
用CHECK BOX 选择其中一个 然后点保存。(如果按照这种方法来做的话一共要选择10次并点10次保存才能完成)
但是现在想实现,10条数据都先选上,然后点击保存键,也能实现10条都能保存的功能。(就是一个一个保存)用什么语句或方法来能实现呢?
谢谢大家~
用CHECK BOX 选择其中一个 然后点保存。(如果按照这种方法来做的话一共要选择10次并点10次保存才能完成)
但是现在想实现,10条数据都先选上,然后点击保存键,也能实现10条都能保存的功能。(就是一个一个保存)用什么语句或方法来能实现呢?
谢谢大家~
{
//判断第i行的checkbox是否选中
if(checkbox[i].Checked) //我不知道你具体用什么控件展现这10条数据,你根据你实际的情况来判断
{
//保存代码
...
}
}
1、实现CHECKBOX全选的功能,判断一下CHECKBOX的选中状态,未选中的使CHECKED=TRUE.......
2、实现保存的功能,其实和你插入一条记录的道理是一样的,只是写一个循环
用for循环一下就可以了
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);
}
}
{
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");
}
}
}
新单号 =生成单号().Substring(0,单号.length -1)+i;
i在循环里++ 那样就能以次进10个新的号了。
如果是别的形式生成的话,在循环里写个新的方法吧
这个是你拿到的号,你直接就读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++;
能不能ADD一条后保存,然后再次循环的时候把第一次ADD的 清除 然后保存
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);
}
这里面去找下,哪个给单号赋值了,再去那里改
对,这个代码不是我写的。 我是想添加这个功能的。呵呵
zrms_s.Receipt_No 这个不是要的单号,这个是上面的数据。
单号是 zrms.ToADODataTable().Rows[0]["receipt_no"] 这个。
现在关键是 zrms.Add(zrms_s); 这里,循环过程中 ADD 几条数据后保存。
能不能ADD一条后保存,然后再次循环的时候把第一次ADD的 清除 然后保存
也放到循环里去new 每次就是新的了
不过这个应该是笨办法,一次全加进去,然后只更新一次数据库是最好的。
你不能在给zrms.ToADODataTable().Rows[0]["receipt_no"]赋值的地方改吗?
然后可以同Gridview显示数据,
然后通过Gridview的rowdatabind事件先判断是否选中,
然后添加数据,
不用写循环,事件会自己循环
{
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);
}
}