Использование Datagrid из SQL-сервера - PullRequest
1 голос
/ 25 сентября 2008

Я хотел бы знать, как наилучшим образом использовать элемент управления сеткой данных, связанный с комбинацией (соединением) таблиц данных, таким образом, что оба способа позволяют просто отображать, создавать новые строки в базовых таблицах и удалять.

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

Предположим, для примера, что база данных содержит: -

Таблица клиентов
* CustomerID
* CustomerName

Стол заказов
* CustomerID
* OrderLineItem
* OrderLineQuanity

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

Ответы [ 3 ]

2 голосов
/ 27 сентября 2008

CSharpAtl правильно, используйте элемент управления Master-Detail. Пример использования одного в приложении WinForm: http://msdn.microsoft.com/en-us/library/y8c0cxey.aspx.

WinForm DataGrids поддерживает добавление, редактирование и удаление записей Master и Detail. Что касается вашего вопроса о том, что произойдет, если вы измените запись детали, чтобы она соответствовала новому мастеру; это невозможно. Разработав строку «Подробно», содержащую только записи, соответствующие основному, вы не можете (например) изменить заказ на принадлежность новому клиенту, поскольку строка «Сведения» не содержит никакой информации о клиенте.

Если вы хотите переместить строку подробностей в другой мастер, вам нужно создать новую строку подробностей для нового мастера, скопировать данные из старой строки подробностей и удалить старую строку подробностей. Если вы амбициозны, вы можете поддерживать строки «Вырезать и вставить» или «Перетаскивание и удаление деталей», но внутренне вы должны создать, скопировать и удалить.

1 голос
/ 25 сентября 2008

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

Подход к решению этой проблемы заключается в реализации хранимых процедур для выполнения операций CRUD. Хранимые процедуры будут содержать логику для вставки, обновления и удаления записей из всех необходимых таблиц. Каждая процедура должна иметь параметр для каждого связанного поля в сетке. Установите процедуры для вставки, обновления и удаления команд в вашем источнике данных.

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

1 голос
/ 25 сентября 2008

Если отношение 1 ко многим, вы можете пойти по пути использования Master Detail. [текст ссылки] [1]

[1]: http://msdn.microsoft.com/en-us/library/aa479344.aspx/"Master Деталь "

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