Преобразование IQueryable в ObservableCollection, должен знать, как - PullRequest
0 голосов
/ 24 февраля 2011

Вопрос в том, почему для наблюдаемой коллекции возникает нулевая ссылка?Ошибка возникает, когда я пытаюсь добавить элемент в объект.

Примечание: я должен знать, как передать все элементы, присутствующие в сетке данных, в наблюдаемую коллекцию.

Ошибка:

Ссылка на объект не установлена ​​для экземпляра объекта.

строка: - "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 ]

5 голосов
/ 24 февраля 2011
ObservableCollection<Web.EMP_TABLE> good = dataGrid1.ItemsSource as ObservableCollection<Web.EMP_TABLE>;

Когда вы используете «as» вместо (TYPE) для приведения, исключение не выдается, если приведение не выполнено.Ваша переменная просто установлена ​​в нуль.Ваш каст не удался.

3 голосов
/ 24 февраля 2011

После вашего редактирования и прочтения комментариев я не вижу, как это должно работать:
Как уже отмечали другие, ваш актерский состав терпит неудачу.
Вы говорите, что передаете ObservableCollection, но на самом деле вы этого не делаете, посмотрите здесь:
В вашем ctor:

dataGrid1.ItemsSource = l.Entities;

l.Entities, скорее всего, IQueryable, а не ObservableCollection

Позже вы пытаетесь разыграть dataGrid1.ItemsSource, что не получается. Вы показали нам код GetEMP_TABLE_OBV, который возвращает ObservableCollection, но я не вижу никакого использования этого метода.

3 голосов
/ 24 февраля 2011

datagrid1.ItemSource не является коллекцией ObservableCollection, поэтому ваше приведение не выполнено, и результат будет нулевым.

Вы должны проверить, какой тип данных на самом деле содержит datagrid1.ItemSource (это тип свойства Entities в типе LoadOperation.) и приведение к этому типу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...