Основные сведения: как добавить запись сведений? - PullRequest
1 голос
/ 27 апреля 2011

Это должно быть просто: если у меня есть отношение детализации основной структуры сущности, как мне добавить запись детали в коде? Допустим, у меня есть родительская таблица / сущность с именем Book и дочерняя / справочная таблица / сущность с именем Chapter, содержащая поле / свойство ChapterTitle. Я хочу, чтобы пользователь мог вводить заголовки глав в TextBox, а затем нажимать кнопку «Добавить заголовок главы». Новый ChapterTitle появится в ListView, который связан с таблицей / сущностью Chapters через CollectionViewSource.

Я НЕ пользуюсь MVVM (и я не ищу ответа с использованием MVVM). Я использую перетаскивание из окна источников данных, как описано в этом сообщении Джули Лерман . Разница в моем случае заключается в том, что вместо отображения и добавления деталей через сетку данных я использую ListView и текстовое поле, чтобы пользователь мог добавить новый заголовок главы.

Перетаскивание создало две записи CollectionViewSource в XAML:

<Window.Resources>
    <CollectionViewSource x:Key="booksViewSource" d:DesignSource="{d:DesignInstance my:Book, CreateList=True}" />
    <CollectionViewSource x:Key="bookChaptersViewSource" Source="{Binding Path=ChaptersNav, Source={StaticResource booksViewSource}}" />
</Window.Resources>

Сгенерированный код выглядит следующим образом:

private System.Data.Objects.ObjectQuery<Book> GetBooksQuery(BookEntities bookEntities)
    {
        // Auto generated code
        System.Data.Objects.ObjectQuery<BookNamespace.Book> booksQuery = bookEntities.Books;
        // Update the query to include Chapters data in Books. You can modify this code as needed.
        booksQuery = booksQuery.Include("Chapters");
        // Returns an ObjectQuery.
        return booksQuery;
    }

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        BookEntities bookEntities = BookEntities();
        // Load data into Books. You can modify this code as needed.
        System.Windows.Data.CollectionViewSource booksViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("booksViewSource")));
        System.Data.Objects.ObjectQuery<BookNamespace.Book> booksQuery = this.GetBooksQuery(bookEntities);
        booksViewSource.Source = booksQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
    }

Какой код мне нужно добавить к моему событию button_click, чтобы взять заголовок главы пользователя из текстового поля и добавить его в качестве новой записи подробностей с помощью CollectionViewSource детали (bookChaptersViewSource)? Я ожидал бы, что это будет довольно просто, но я потратил слишком много времени, пытаясь и не имея никакой удачи. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Извините за VB, но это должно быть достаточно просто для перевода:

Dim c as Chapter = New Chapter
c.Title = ChapterTitleTextBox.Text
context.AddObject(c, "Chapters")
MyBook.Chapters.Add(c)

Это действительно все, что нужно. Создайте объект, добавьте его в контекст, добавьте его в коллекцию деталей для мастера. В приведенном выше примере в методе Context.AddObject «Chapters» относится к имени EntitySet класса, который вы добавляете в контекст.

CollectionViewSource, чей источник установлен в коллекцию "Глава книги", должен добавить дополнение главы, и пользовательский интерфейс должен быть обновлен новым элементом. Как правило, вам не нужно взаимодействовать с CollectionViewSource, за исключением случаев изменения представления (фильтрации, сортировки и т. Д.).

0 голосов
/ 27 апреля 2011

Вероятно, я не совсем понимаю проблему, но обычно вам нужно создать новый дочерний объект и назначить его в родительский список детей.Когда вы сохраняете родителя, он должен сохранить новый дочерний объект.Или вы можете назначить парентиду нового дочернего объекта и сохранить его.

...