Привязать DataGridView к нескольким таблицам - PullRequest
1 голос
/ 19 апреля 2011

В моей базе данных есть следующие три таблицы, которые я хочу отобразить пользователю в одном DataGridView:

RecipeNames     RecipeValue         Ingredient
-----------     -------------       ----------
PK  Name        FK RecipeName      
                FK IngredientName   PK Name
                   Amount

Пользователь должен видеть по одной строке на RecipeName, имя рецепта -Первый столбец и ингредиент именуют следующие столбцы.Каждая ячейка будет содержать количество recipeValue, и каждый рецепт имеет каждый ингредиент.Также пользователь должен иметь возможность редактировать любую ячейку, добавлять новый рецепт, добавляя новую строку.Должно выглядеть так:

Name     |  Ingredient 1 | ... | Ingredient n |
-----------------------------------------------
Recipe1  |   100         | ... | 1000         |
Recipe2  |   200         | ... | 2000         |

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

  • добавить столбцы для каждой строки в таблице ингредиентов
  • добавить строки для каждого Имени в RecipeNames
  • заполнить ячейки в соответствии с таблицей RecipeValue

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

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

Также приветствуются любые комментарии к дизайну.

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

1 Ответ

1 голос
/ 19 апреля 2011

Не могли бы вы не работать со строками в качестве первичных или внешних ключей? Это очень плохая практика, и если вы работаете с MSSQL (что, я думаю), вы снижаете скорость сервера.

tblRecipeNames  AsRecipeValue       tblIngredients    tblAmountTypes
-----------     -------------       ----------        ----------
PK ID           PK ID               PK ID             PK ID
   Name         FK RecName_ID          Name              Name
                FK Ingredient_ID
                FK AmountType
                   Amount

Я переименовал ваше RecipeValue, потому что эта таблица является «таблицей ассоциаций», поэтому отсюда и «As». Я также добавил идентификаторы в каждую таблицу, потому что это то, с чем вы должны работать.

Новая таблица AmountTypes из-за различных типов:

  • чайная ложка
  • столовая ложка
  • большой
  • средний
  • маленький
  • чашка
  • цедра

и т. Д.

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

Например:

SELECT * FROM tblRecipeNames 
        INNER JOIN AsRecipeValue ON tblRecipeNames.ID = AsRecipeValue.RecName_ID
        INNER JOIN tblIngredients ON tblIngredients.ID = AsRecipeValue.Ingredient_ID

Это первый шаг. Если вы там, вы можете добавить SqlDatasource в свой GridView, а на сайте вы добавите свои хранимые процедуры в элемент управления следующим образом:

<asp:SqlDataSource ID="sqlSrc" runat="server" InsertCommand="spInsert" DeleteCommand="spDelete" UpdateCommand="spUpdate" />

sp * обозначает вашу собственную хранимую процедуру.

...