Reputation: 16918
While executing this method:
public static List<T> ToList<T>(DataTable dataTable)
{
Type type = typeof(T);
List<T> list = new List<T>();
foreach (DataRow dr in dataTable.Rows)
{
object[] args = new object[1];
args[0] = dr;
list.Add((T)Activator.CreateInstance(type, args));
}
return list;
}
I am getting this exception:
Constructor on type 'Northwind.BO.Products' not found.
But I know that I already have declared a constructor in my Products
class.
public class Products
{
private int _ProductID;
[DataMapping("ProductID", -99)]
public int ProductID
{
get { return _ProductID; }
set
{
if (_ProductID <= 0)
{
_ProductID = value;
}
else
{
throw new Exception("ID should not be set manually!");
}
}
}
private string _ProductName;
[DataMapping("ProductName", "")]
public string ProductName
{
get { return _ProductName; }
set { _ProductName = value;}
}
private int _SupplierID;
[DataMapping("SupplierID", -99)]
public int SupplierID
{
get { return _SupplierID; }
set { _SupplierID = value;}
}
private int _CategoryID;
[DataMapping("CategoryID", -99)]
public int CategoryID
{
get { return _CategoryID; }
set { _CategoryID = value;}
}
private string _QuantityPerUnit;
[DataMapping("QuantityPerUnit", "")]
public string QuantityPerUnit
{
get { return _QuantityPerUnit; }
set { _QuantityPerUnit = value;}
}
private decimal _UnitPrice;
[DataMapping("UnitPrice", -99.99)]
public decimal UnitPrice
{
get { return _UnitPrice; }
set { _UnitPrice = value;}
}
private short _UnitsInStock;
[DataMapping("UnitsInStock", -99)]
public short UnitsInStock
{
get { return _UnitsInStock; }
set { _UnitsInStock = value;}
}
private short _UnitsOnOrder;
[DataMapping("UnitsOnOrder", -99)]
public short UnitsOnOrder
{
get { return _UnitsOnOrder; }
set { _UnitsOnOrder = value;}
}
private short _ReorderLevel;
[DataMapping("ReorderLevel", -99)]
public short ReorderLevel
{
get { return _ReorderLevel; }
set { _ReorderLevel = value;}
}
private bool _Discontinued;
[DataMapping("Discontinued", false)]
public bool Discontinued
{
get { return _Discontinued; }
set { _Discontinued = value;}
}
public Products(object[] args)
{
}
public Products()
{
}
Upvotes: 0
Views: 332
Reputation: 887459
The problem is that the Northwind.BO.Products
class doesn't have a public
constructor that takes a single DataRow
.
Can you tell us what constructors it has?
Upvotes: 2
Reputation: 233150
You don't need a constructor on any Northwind
class - according to the exception, you need the correct constructor on Northwind.BO.Products
.
Furthermore, as used by Activator.CreateInstance, this constructor must have the right signature that matches the argument you pass to it. Since you are passing an argument to it, the default constructor will not match.
As I read your question, it must have this constructor
public Products(DataRow dr)
Upvotes: 1
Reputation: 97701
The constructor most signature probably does not match the argument you're supplying.
Upvotes: 0