如何将DataSource转换为List <T>?

Cri*_*jon 14 c# casting datasource datagridview winforms

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

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

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

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;
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了InvalidCastException这条线:

List<object> products = (List<object>)Source.DataSource;
Run Code Online (Sandbox Code Playgroud)

那么如何将DataSource转换为List呢?

Dav*_*ish 21

你不能直接向List施放;

或者:

List<Product> products = (List<Product>)Source.DataSource;
Run Code Online (Sandbox Code Playgroud)

要么:

List<Object> products = ((List<Product>)Source.DataSource).Cast<object>().ToList();
Run Code Online (Sandbox Code Playgroud)


Til*_*lak 5

那么如何将数据源转换为列表?

你有很多选择

var products = (List<Product>)Source.DataSource; // products if of type List<Product>
Run Code Online (Sandbox Code Playgroud)

要么

 List<Object> products = ((IEnumerable)Source.DataSource).Cast<object>().ToList();
Run Code Online (Sandbox Code Playgroud)

要么

List<Object>  products = ((IEnumerable)Source.DataSource).OfType<object>().ToList();
Run Code Online (Sandbox Code Playgroud)

要么

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