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处没有任何行。
本人新手,望详解,谢谢!

解决方案 »

  1.   

    但是我把MessageBox.Show("5");
    换成MessageBox.Show(__tmpgoodsid);
    是能够弹出这个值的
      

  2.   

    DataTable __dt11 = __ds11.Tables[0]; 这一句出错 因为__ds11中没有获取到表 
    判断__ds11 是否为空
      

  3.   

    shopid goodsid 之类的列名对吗? 检查下
      

  4.   

    列名没问题
    改成newRow[0]
    newRow[1]
    也是一样的
      

  5.   

     DataSet __ds11 = myForm.ExecDataSet(__sql+__where);
     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);
    }
    加了个判断还是一样……
      

  6.   


    我不知道你想怎么实现,
    DataRow newRow =myForm.DetailDataTable1.NewRow(); 从你这句可以看出你是在原来虚拟表的基础上再重新添加行,那么你只能给到一行的值,如果你还想添加新的行,必须再重新new 一个行
    如果你是想复制现有虚拟表内容的话,那么我觉得你可以重新创建一个虚拟表,那样再把你现在这个虚拟表中的数据赋过去就没问题了。
      

  7.   

    AllowPaging 属性为 True?
      

  8.   

    newRow["goodsid"] 查查有没有 goodsid 这个列名。
    还有用debug,F10单步调试,再用Watch监视变量值(鼠标移上去就可以),这么弹message多累啊。
      

  9.   

    DataSet __ds11 = myForm.ExecDataSet(__sql+__where);
    if (__ds11.Tables.Count==0)
    {
    MessageBox.Show("xx");
    return;
    }
    进行下判断
      

  10.   

    newRow["goodsid"]列是否存在呢?跟踪一下
      

  11.   

    自己调了一下午
    后来把myForm.DetailDataTable1.Rows.Add(newRow);
    改到newRow["shopid"]=__tmpshopid;前面就过去了……
    想知道为什么……