如何将DataSource转换为List <t>?</t>

时间:2013-01-11 14:16:18

标签: c# winforms datagridview casting datasource

我有以下方法在DataGridView上加载产品

private void LoadProducts(List<Product> products)
{
    Source.DataSource = products;  // Source is BindingSource
    ProductsDataGrid.DataSource = Source;
}

现在我正试图让我回来保存它们,如下图所示。

private void SaveAll()
{
   Repository repository = Repository.Instance;
   List<object> products = (List<object>)Source.DataSource; 
   Console.WriteLine("Este es el número {0}", products.Count);
   repository.SaveAll<Product>(products);
   notificacionLbl.Visible = false;
}

但我在这一行得到InvalidCastException

List<object> products = (List<object>)Source.DataSource;

那么如何将DataSource转换为List?

4 个答案:

答案 0 :(得分:20)

你不能直接将符号直接转换为List;

或者:

List<Product> products = (List<Product>)Source.DataSource;

或:

List<Object> products = ((List<Product>)Source.DataSource).Cast<object>().ToList();

答案 1 :(得分:4)

  

那么如何将DataSource转换为List?

你有很多选择

var products = (List<Product>)Source.DataSource; // products if of type List<Product>

 List<Object> products = ((IEnumerable)Source.DataSource).Cast<object>().ToList();

List<Object>  products = ((IEnumerable)Source.DataSource).OfType<object>().ToList();

List<Object> products = new List<Object>();
((IEnumerable)Source.DataSource).AsEnumerable().ToList().ForEach( x => products.Add( (object)x));

答案 2 :(得分:3)

您的列表属于List<Product>类型,与List<object>不同。尝试转换为List<Product>

答案 3 :(得分:0)

解决答案这是我的解决方案:

private void SaveAll()
{
    Repository repository = Repository.Instance;
    List<Product> products = (List<Product>)Source.DataSource;
    IEnumerable<object> objects = products.Cast<object>();
    repository.SaveAll<Product>(objects.ToList<object>());
    notificacionLbl.Visible = false;
}

我接受建设性的批评。