将IQueryable转换为ObservableCollection,必须知道如何

时间:2011-02-24 10:23:38

标签: c# datagrid observablecollection

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

注意:我必须知道如何将datagrid中的所有项目都提供给observable collection。

错误:

  

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

行: - “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;
}

3 个答案:

答案 0 :(得分:5)

ObservableCollection<Web.EMP_TABLE> good = dataGrid1.ItemsSource as ObservableCollection<Web.EMP_TABLE>;

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

答案 1 :(得分:3)

datagrid1.ItemSource不是一个ObservableCollection,所以你的演员阵容失败了,因此很好。

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

答案 2 :(得分:3)

在您编辑和阅读评论后,我看不出,这应该如何运作:
正如其他人所指出的那样,你的演员阵容失败了 你说,你传递一个ObservableCollection,但事实上,你没有这样做,看看这里:
在你的ctor:

dataGrid1.ItemsSource = l.Entities;

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

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