【问题标题】:Converting IQueryable to ObservableCollection, must know how将 IQueryable 转换为 ObservableCollection,必须知道如何
【发布时间】:2011-07-03 11:08:55
【问题描述】:

问题是为什么可观察集合会出现空引用?当我尝试将项目添加到 obscollection 时发生错误。

注意:我必须知道如何将数据网格中存在的所有项目提供给可观察的集合。

错误:

对象引用未设置为对象的实例。

line:- “good.Add(temp_table);”在按钮中一键点击

.xaml.cs

Web.DomainService1 oservice = new Web.DomainService1();
public static ObservableCollection<Web.EMP_TABLE> good = new ObservableCollection<Web.EMP_TABLE>();

public Home()
{
    InitializeComponent();
    this.Title = ApplicationStrings.HomePageTitle;

    EntityQuery<Web.EMP_TABLE> q = oservice.GetEMP_TABLE_OBVQuery();
    LoadOperation<Web.EMP_TABLE> l = oservice.Load(q);
    dataGrid1.ItemsSource = l.Entities;
}



private void button1_Click(object sender, System.Windows.RoutedEventArgs e)
{
    ObservableCollection<Web.EMP_TABLE> good = 
        dataGrid1.ItemsSource as ObservableCollection<Web.EMP_TABLE>;
    Web.EMP_TABLE temp_table = new Web.EMP_TABLE();
    temp_table.SALARY = "new_sal";
    temp_table.EMP_NAME = "new_name";
    temp_table.EMP_NO = "new_num";
    good.Add(temp_table);
}

.xaml

<sdk:DataGrid AutoGenerateColumns="True" Height="116" Name="dataGrid2" Width="539" />

DomainService 函数

public ObservableCollection<EMP_TABLE> GetEMP_TABLE_OBV()
{
    var value = from c in this.ObjectContext.EMP_TABLE
                select c;
    ObservableCollection<EMP_TABLE> result = new ObservableCollection<EMP_TABLE>(value);
    return result;
}

【问题讨论】:

  • 请记住,stackoverflow 上的任何人都没有付费回答问题,因此对响应能力的任何要求或期望都是没有意义的。
  • "最近发现soflow的用户回复速度不如过去了"嗯,太糟糕了。
  • 这可能是因为人们没有对您的问题做出如此快速的回答,因为您没有花任何精力来制定它们?所有代码到底是什么?其中大部分与问题无关。你是无知的,因此我投反对票。
  • 好吧,至少投票很快就完成了
  • 你好像没明白,是吗?

标签: c# datagrid observablecollection


【解决方案1】:
ObservableCollection<Web.EMP_TABLE> good = dataGrid1.ItemsSource as ObservableCollection<Web.EMP_TABLE>;

当您使用“as”而不是 (TYPE) 进行转换时,如果转换失败,则不会抛出异常。您的变量只是设置为空。 你的演员失败了。

【讨论】:

    【解决方案2】:

    在您编辑和阅读 cmets 之后,我不明白这应该如何工作:
    正如其他人指出的那样,您的演员阵容失败了。
    你说,你传了一个 ObservableCollection,但其实你不做,看这里:
    在你的 ctor 中:

    dataGrid1.ItemsSource = l.Entities;
    

    l.Entities 很可能是 IQueryable,而不是 ObservableCollection

    稍后,您尝试投射 dataGrid1.ItemsSource,但失败了。 您向我们展示了GetEMP_TABLE_OBV 的代码,它返回一个ObservableCollection,但我没有看到该方法的任何用法。

    【讨论】:

    • 是的,强制转换失败,有一个空引用,但是这一行“EntityQuery q = oservice.GetEMP_TABLE_OBVQuery();”使用 GetEMP_TABLE_OBV OR NOT?
    • 好的,那么当我尝试“oservice.GetEMP_TABLE_OBV()”时没有出现,有没有办法纠正这个问题?显然,我该如何调用这个方法?
    • 我在这里有点困惑,当我尝试使用纯 silveranabled wcf 服务时,数据库的限制,如 LENGTH、PRIMARY KEY(editable(false) 等不起作用。当我使用域服务,我无法将我的数据作为可观察的集合获取
    • 我不知道,因为我不了解您的代码或您想要实现的目标。
    • 我正在尝试将表格中的选择项传递给 silverlight 客户端,以便它们出现在网格中,维护实体跟踪并可以用作可观察的集合
    【解决方案3】:

    datagrid1.ItemSource 不是 ObservableCollection,因此您的演员阵容失败,因此为 null。

    您必须检查 datagrid1.ItemSource 实际持有的类型(它是 LoadOperation 类型上的 Entities 属性的类型)并转换为该类型

    【讨论】:

    • 但是我在域服务中传递了一个 observable 集合,那么如何实现呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2012-01-22
    相关资源
    最近更新 更多