【问题标题】:WPF. Unable to cast object of typeWPF。无法转换类型的对象
【发布时间】:2011-08-21 14:58:40
【问题描述】:

大家好,我收藏了:

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;

有人知道为什么我会收到这样的错误吗?

【问题讨论】:

  • 填充 view.SourceCollection 的代码在哪里?
  • ICollectionView 视图 = CollectionViewSource.GetDefaultView(dataGrid1.ItemsSource);
  • 如何设置dataGrid1.ItemsSource?从源创建视图然后仅使用该源的目的是什么?
  • @svick 这样做有很多原因 - 您可能希望在 UI 中对数据进行排序,但需要在用户单击此按钮后对其原始形式的列表进行原始访问。
  • @cunningdave,但是,据我所知,视图永远不会靠近 UI。它只是用来访问它的源,没有别的。

标签: c# wpf


【解决方案1】:

来自 ActionDatas 的数据可能被隐式分配给 SourceCollection(可能在 XAML 中),它是一个 ObservableCollection(与 List 不同)。它是 ObservableCollection 是一件好事,因为集合更改会自动通知正在侦听的 WPF UI。

您应该能够简单地分配一个 ActionDatas,并传输元素:

exp.dataToPrint = new ActionDatas();

foreach(ActionData data in view.SourceCollection) {
    exp.dataToPrint.Add(data);
}

或者类似的东西。

更新:如果你的 datagrid ItemsSource 已经是一个 ActionDatas 对象,那么你应该将它直接分配给 dataToPrint 成员,无需将它放在视图中然后再转移回新集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2014-06-09
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多