Использовать столбец ID DataGridView в качестве источника запроса другого DataGridView. - PullRequest
0 голосов
/ 31 августа 2009

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

Какой хороший способ сделать это?


Мои идеи возможных решений

Привязка к анонимному типу

Я бы связал свой DataGridView с BindingSource, который привязан к результату анонимного запроса LINQ (анонимный тип). Чтобы получить идентификатор для построения отношения ко второму DataGridView, я бы использовал отражения.

Привязка к определенному типу

Я бы создал класс, который содержит все поля, которые я хочу показать в моем DataGridView, и дополнительно поле идентификатора. BindindSource будет связываться с экземпляром этого конкретного класса.

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

1 Ответ

1 голос
/ 31 августа 2009

Простое решение - убедиться, что атрибут ID является ключом DataKey в первом Gridview. Добавьте событие RowSelecting к первому Gridview, используйте атрибут ID для этой строки в качестве параметра для второго Gridview и DataBind.

Если вы пытаетесь отобразить разные данные в зависимости от выбранной строки (т. Е. Данные могут поступать из нескольких разных таблиц базы данных), я бы посоветовал вам создать GridView для каждой из этих таблиц и в вашем событии RowSelecting определить, какой GridView связывать и отображать.

Намного проще и понятнее иметь статические GridViews, чем динамически создавать и форматировать их.

РЕДАКТИРОВАТЬ: Итак, если у вас есть структура n: m: l и вы хотите отобразить все l для определенного n, вам нужно запустить подвыбор, такой как SELECT * FROM l WHERE l.m_id IN (SELECT m_id FROM m WHERE m.n_id = n_value)

Итак, в итоге:

  1. Читать свойство DataKey. это поможет вам сохранить значение n ( id таблицы n).
  2. Читать дальше Событие RowSelecting. Это позволит вы поймать значение n для выбранная строка.
  3. Запустить аналогичный запрос к вышесказанному и привязать свой второй GridView для получения DataSource.

Надеюсь, это поможет.

...