DataSet __ds11 = myForm.ExecDataSet(__sql+__where); DataTable __dt11 = __ds11.Tables[0];
if(__dt11.Rows.Count ==0)
{
MessageBox.Show("不存在此单或没有合适的商品,请另填单号!","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
return;
}
MessageBox.Show("1");
foreach (DataRow myRow in __dt11.Rows)
{
MessageBox.Show("2");
__tmpgoodsid = Convert.ToString(myRow["goodsid"]);
__tmpshopid = Convert.ToString(myRow["shopid"]);
__tmpprice=Convert.ToString(myRow["price"]);
MessageBox.Show("3");
DataRow newRow =myForm.DetailDataTable1.NewRow();
MessageBox.Show("4");
newRow["shopid"]=__tmpshopid;
MessageBox.Show("5");
newRow["goodsid"]=__tmpgoodsid;
MessageBox.Show("6");
newRow["price"]=__tmpprice;
MessageBox.Show("7");
newRow=onFindGoodsPara(newRow);
MessageBox.Show("8");
myForm.DetailDataTable1.Rows.Add(newRow);
}
消息可以弹到5
之后就提示 在位置0处没有任何行。
本人新手,望详解,谢谢!
if(__dt11.Rows.Count ==0)
{
MessageBox.Show("不存在此单或没有合适的商品,请另填单号!","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
return;
}
MessageBox.Show("1");
foreach (DataRow myRow in __dt11.Rows)
{
MessageBox.Show("2");
__tmpgoodsid = Convert.ToString(myRow["goodsid"]);
__tmpshopid = Convert.ToString(myRow["shopid"]);
__tmpprice=Convert.ToString(myRow["price"]);
MessageBox.Show("3");
DataRow newRow =myForm.DetailDataTable1.NewRow();
MessageBox.Show("4");
newRow["shopid"]=__tmpshopid;
MessageBox.Show("5");
newRow["goodsid"]=__tmpgoodsid;
MessageBox.Show("6");
newRow["price"]=__tmpprice;
MessageBox.Show("7");
newRow=onFindGoodsPara(newRow);
MessageBox.Show("8");
myForm.DetailDataTable1.Rows.Add(newRow);
}
消息可以弹到5
之后就提示 在位置0处没有任何行。
本人新手,望详解,谢谢!
换成MessageBox.Show(__tmpgoodsid);
是能够弹出这个值的
判断__ds11 是否为空
改成newRow[0]
newRow[1]
也是一样的
if (__ds11.Tables.Count==0)
{
MessageBox.Show("xx");
return;
}
DataTable __dt11 = __ds11.Tables[0];
if(__dt11.Rows.Count ==0)
{
MessageBox.Show("不存在此单或没有合适的商品,请另填单号!","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
return;
}
MessageBox.Show("1");
foreach (DataRow myRow in __dt11.Rows)
{
MessageBox.Show("2");
__tmpgoodsid = Convert.ToString(myRow["goodsid"]);
__tmpshopid = Convert.ToString(myRow["shopid"]);
__tmpprice=Convert.ToString(myRow["price"]);
MessageBox.Show("3");
DataRow newRow =myForm.DetailDataTable1.NewRow();
MessageBox.Show("4");
newRow["shopid"]=__tmpshopid;
MessageBox.Show("5");
newRow["goodsid"]=__tmpgoodsid;
MessageBox.Show("6");
newRow["price"]=__tmpprice;
MessageBox.Show("7");
newRow=onFindGoodsPara(newRow);
MessageBox.Show("8");
myForm.DetailDataTable1.Rows.Add(newRow);
}
加了个判断还是一样……
我不知道你想怎么实现,
DataRow newRow =myForm.DetailDataTable1.NewRow(); 从你这句可以看出你是在原来虚拟表的基础上再重新添加行,那么你只能给到一行的值,如果你还想添加新的行,必须再重新new 一个行
如果你是想复制现有虚拟表内容的话,那么我觉得你可以重新创建一个虚拟表,那样再把你现在这个虚拟表中的数据赋过去就没问题了。
还有用debug,F10单步调试,再用Watch监视变量值(鼠标移上去就可以),这么弹message多累啊。
if (__ds11.Tables.Count==0)
{
MessageBox.Show("xx");
return;
}
进行下判断
后来把myForm.DetailDataTable1.Rows.Add(newRow);
改到newRow["shopid"]=__tmpshopid;前面就过去了……
想知道为什么……