0

我收到错误:

无法将“System.Data.DataRow”类型的对象转换为“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);
            }
        }
    }
4

3 回答 3

2

由于数据类型不匹配,下一行出现错误。

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

它应该像

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

你需要写GetOrderDataRowViewFromDataRow

于 2013-01-03T16:30:13.720 回答
1

好吧,天哪,那么,不要那样做。试试这个:

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

foreach (DataRow dr in dscrntProd.Rows)
{
    addToOrder(dr);
}
于 2013-01-03T16:32:02.073 回答
0

DataRowi 不能转换为 DataRowView

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

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

谢谢。

于 2013-01-03T16:40:06.043 回答