我有以下方法在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?
答案 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;
}
我接受建设性的批评。