Love_Egypt
Love_Egypt

Reputation: 189

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

I received the error:

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);
            }
        }
    }

Upvotes: 0

Views: 13815

Answers (3)

Reacher Gilt
Reacher Gilt

Reputation: 1813

Well, geez, don't do that, then. Try this instead:

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

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

Upvotes: 1

Rashedul.Rubel
Rashedul.Rubel

Reputation: 3584

DataRowis not convertable to DataRowView

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

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

Thanks.

Upvotes: 0

Tilak
Tilak

Reputation: 30728

Error is coming in following line due to data type mismatch.

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

It should be like

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

You need to write GetOrderDataRowViewFromDataRow.

Upvotes: 2

Related Questions