2013-01-03 33 views
0

我接收到的错误:无法转换类型的对象的System.Data.DataRow'为类型“System.Data.DataRowView

Unable to cast object of type 'System.Data.DataRow' to type 'System.Data.DataRowView'.

private void addToOrder(DataRowView drv) 
    { 
     DataRow dr = orderDataTable.NewRow(); 
     dr["ProductID"] = drv["ProductID"]; 
     dr["ProductBarcode"] = drv["ProductBarcode"]; 
     dr["ProductName"] = drv["ProductName"]; 
     dr["SalePrice"] = drv["SalePrice"]; 
     dr["SoldQuantity"] = 1; 
     dr["NotEditable"] = false; 
     try 
     { 
      orderDataTable.Rows.Add(dr); 
     } 
     catch (ConstraintException) 
     { 
      DataRow dr1 = orderDataTable.Rows.Find(drv["ProductID"]); 
      dr1["SoldQuantity"] = Convert.ToInt32(dr1["SoldQuantity"]) + 1; 
     } 
    } 
    private void btnAddToOrder_Click(object sender, RoutedEventArgs e) 
    { 
     // add to order 
     if(txtBarcodeAuto.Text.Length >0) 
     { 
      //get data from sql server database for product details(productID, ProductName,ProductPrice) 
      DataTable dscrntProd = prods.SelCrntProd4Sale(crntProdID); 
      foreach (DataRowView dr in dscrntProd.Rows) 
      { 
       addToOrder(dr); 
      } 
     } 
    } 

回答

2

错误是在下面的行来由于数据类型不匹配。

foreach (DataRowView dr in dscrntProd.Rows) // as dscrntProd is DataTable 

应该是这样

foreach (DataRow dr in dscrntProd.Rows) 
{ 
    addToOrder(GetOrderDataRowViewFromDataFow(dr)); 
} 

你需要写GetOrderDataRowViewFromDataRow

+0

不错,赶上! +1 .. –

+0

除了你的结论之外,他不需要编写'GetOrderDataRowViewFromDataRow',而是改变'addToOrder'的签名来使用'DataRows'作为@Reacher所提到的。 –

1

那么,geez,那么不要那样做。试试这个:

private void addToOrder(DataRow drv) 
{ 
    .... 
} 

foreach (DataRow dr in dscrntProd.Rows) 
{ 
    addToOrder(dr); 
} 
+1

+1即使“不这样做”,应该是“那么做:” –

+1

病人:医生,当我这样做的时候会很痛。医生:那么不要那样做。 (编辑我的评论) –

0

DataRowis不是可转换到DataRowView的

foreach(DataRow dr in dscrntProd.Rows) 
{ 
    addToOrder(dr); 
} 

private void addToOrder(DataRow dr) // change the function argument to DataRow. 
    {// Do something. 
} 

感谢。

+0

-1'DataTable.Rows'确实返回'DataRows'而不是'DataRowViews'的集合。 –

+0

对不起,我写错了。我正在编辑,请检查。 –

+0

但是,这与@Reachers现在的答案是一样的,所以我没有看到附加值。然后你可能想删除它。 –

相关问题