大家好我有收藏:
public class ActionData
{
private int iD;
public int ID
{
get { return iD; }
set { iD = value; }
}
private string roomType;
public string RoomType
{
get { return roomType; }
set { roomType = value; }
}
}
像这样
private void btnGridToExcel_Click(object sender, RoutedEventArgs e)
{
ExportExcel<ActionData, ActionDatas> exp = new ExportExcel<ActionData, ActionDatas>();
exp.GenerateReport();
ICollectionView view = CollectionViewSource.GetDefaultView(dataGrid1.ItemsSource);
exp.dataToPrint = (ActionDatas)view.SourceCollection;
exp.GenerateReport();
}
在此按钮上单击必须将数据导出到Excel,但我在exp.dataToPrint = (ActionDatas)view.SourceCollection;
上发出错误:
无法将类型为'System.Collections.ObjectModel.ObservableCollection`1 [H_Pro.Logicstic + ActionData]'的对象强制转换为'ActionDatas'。
以下是获取值的方法的一部分
public class ActionDatas : List<ActionData> { }
#region toxls
public class ExportExcel<T, U>
where T : class
where U : List<T>
{
public List<T> dataToPrint;
有没有人知道为什么会出现这样的错误?
答案 0 :(得分:2)
来自ActionDatas的数据可能被隐式地分配给SourceCollection(可能在XAML中),这是一个ObservableCollection&lt;&gt; (与List&lt;&gt;不同)。它是一个ObservableCollection是一件好事,因为集合更改将自动通知侦听WPF UI。
您应该能够简单地分配一个ActionDatas,并传输元素:
exp.dataToPrint = new ActionDatas();
foreach(ActionData data in view.SourceCollection) {
exp.dataToPrint.Add(data);
}
或类似的东西。
更新:如果你的datagrid ItemsSource已经是一个ActionDatas对象,那么你应该将它直接分配给dataToPrint成员,不需要将它放在视图中然后转回到新的集合中。