【问题标题】:Can't convert DataGrid selected item to object type无法将 DataGrid 所选项目转换为对象类型
【发布时间】:2011-10-08 15:57:34
【问题描述】:

我希望有人能够帮助我解决这个问题。从昨天开始我就一直在这,但一无所获。

我有一个包含共享列表的数据网格,共享是一种类型。
每个共享都包含一个包含最近 30 天共享历史的列表。 我想在图表中显示所选项目的历史记录。

我不知道是否可以将图表直接绑定到数据网格,但我认为这对我不起作用,因为我的下一步是允许多项选择并将它们全部绘制在一个图表上。

我最近尝试的测试是:

字符串测试 = ((Share)ShareGrid.Items[ShareGrid.SelectedIndex]).Ticker;

给出错误 {“无法将“Share”类型的对象转换为“ProjectMain.Share”类型。”} ProjectMain 是我的命名空间

我也试过了

共享测试 = ShareGrid.SelectedItem 作为共享;

测试只是保持为空。

我已经围绕这些主题尝试了很多东西,但显然缺少一些东西,因此非常感谢任何帮助。

谢谢。

乔

更多细节: 我绑定投资组合列表框如下:

        PortfolioListBox.ItemsSource = MainWindow.LoggedOnUser.Portfolio;
        PortfolioListBox.SelectedIndex = 0;

我根据投资组合列表框绑定共享网格如下:

    private void PortfolioListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        listPortfolio = (PortfolioListBox.SelectedItem as Portfolio);
        ShareGrid.ItemsSource = listPortfolio.Share;
        ShareGrid.SelectedIndex = 0;
    }

投资组合列表框的 XML 是:

                        <ListBox Name ="PortfolioListBox" 
                                 DisplayMemberPath="name" 
                                 SelectionChanged="PortfolioListBox_SelectionChanged"
                                 DataContext="{Binding Path=SelectedItem}"/>

为共享网格设置的xml如下:

<DataGrid   AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Left" 
    Name="ShareGrid" VerticalAlignment="Top" SelectionMode="Extended" 
    SelectionUnit="FullRow" SelectionChanged="ShareGrid_SelectionChanged"
        CanUserResizeRows="False" CanUserResizeColumns="False" FrozenColumnCount="1" 
        FontSize="16" IsReadOnly="True" DataContext="{Binding Path=SelectedItem}">

【问题讨论】:

  • 消息Unable to cast object of type 'Share' to type 'ProjectMain.Share 表明您有两个名为Share 的类,一个在ProjectMain 命名空间中,一个不在任何命名空间中。这是正确的吗?

标签: wpf datagrid casting selecteditem


【解决方案1】:

假设选择了一个项目,这应该可以工作。

    Share test = ShareGrid.SelectedItem as Share;

你的测试是用

选择的项目
    ShareGrid.SelectedIndex >= 0 

如果未选择任何项目,则 SelectedIndex 将为 -1

【讨论】:

  • 感谢您的回答。是的,我认为这应该有效,但事实并非如此。这可能与我设置数据网格的方式或填充方式有关吗?这是它的填充方式: Portfolio listPortfolio = (PortfolioListBox.SelectedItem as Portfolio); ShareGrid.ItemsSource =listPortfolio.Share; ShareGrid.SelectedIndex = 0;我们非常感谢所有建议。谢谢乔
  • 您的数据是否显示在网格中?如果投资组合是公共财产?
  • 是的,网格中的所有内容都应按原样显示。投资组合是另一类。
  • 了解 Portfolio 是一个类。请在绑定此 DataGrid 的位置发布代码。
  • 谢谢。我在上面添加了更多细节。
猜你喜欢
  • 2023-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2021-12-06
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多