2009-03-23 5 views
0

Это, вероятно, странный вопрос, но здесь я иду (дайте мне знать, если это плохой дизайн базы данных или просто странная ситуация, в которой я нахожусь).Binding Controls для более чем одного DataTable

У меня есть две таблицы в моей базе данных: ProductGroup и параметры. Один содержит информацию о различных группах продуктов в соответствии с их именем, а другой содержит информацию о различных параметрах, которые могут быть применены к каждой группе (и, таким образом, каждая группа отличается).

Теперь, чтобы связать две таблицы, существует третья таблица - GroupParameters с двумя первичными ключами: parameterId и groupId, а третий столбец - значение параметра для этой группы.

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

Спасибо, ребята!

EDIT: Есть важная деталь, которую я забыл. Я хочу использовать DataSet и DataTable объекты для хранения данных в памяти из базы данных, а также привязки их к элементам управления. Причина этого не имеет никакого отношения к этой проблеме, но он должен делать со мной того, чтобы отслеживать изменения и быть в состоянии отменить их на пользователей будет :(

+0

Я думаю, что в этом посте есть небольшая, но потенциально запутанная опечатка. Я * думаю * плакат должен был сказать: «У меня есть две таблицы в моей базе данных: ProductGroup и Parameters». –

+0

Имя таблицы не имеет значения. Вы можете вызвать его Параметры или GroupParameters, таблица содержит идентификатор, имя и описание для параметров, которые могут быть применены к группе (описано в таблице ProductGroup). – Alexandra

+0

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

ответ

0

На самом деле лучшее, что сработало для меня, было использовать MultiBinding. Я не знал об этом - это отстой, чтобы учиться самостоятельно через поисковые запросы Google (даже если обучение с книгой будет медленным).

0

Я не вижу никакой реальной плохой дизайн здесь.

Вы можете создать пользовательский интерфейс для этого как список групп товаров, которые пользователь должен выбрать из списка (ListBox привязан к коллекции ProductGroups), тогда вы можете иметь пользовательский контроль со свойством ListBox, с именем CurrentGroupId и некоторыми кнопками управления (например, OK "). Bind CurrentGroupId для выбранного значения ProductGroups ListBox. При изменении CurrentGroupId или изменении набора параметров вы должны отфильтровать эти внутренние элементы ListBox с помощью LINQ или что-то еще - в основном добавьте ListBox с помощью GroupParameter, где CurrentGroupId соответствует выбранному ProductGroupId. Элементы ListBox должны быть GroupParam этерических объектов.

Теперь (наконец-то :)) ответ на ваш вопрос: вы можете Элементы списка данных шаблонного, чтобы иметь текстовое поле, присоединенные к свойству Value, как это (здесь «местный» ваше пространство имен):

<DataTemplate DataType={x:Type local:GroupParameter}> 
    <StackPanel Orientation="Horizontal"> 
    <TextBox Text="{Binding Value, Mode=TwoWay}" /> 
    <Button Content="OK" Click=INSERT_YOUR_OK_HANDLER_HERE /> 
    <Button Content="Cancel" Click=INSERT_YOUR_CANCEL_HANDLER_HERE /> 
    </StackPanel> 
</DataTemplate> 

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

Надеюсь, что это поможет, и если трудно понять, что я только что сказал, я могу написать большую часть этого кода, я думаю. Не стесняйтесь спрашивать меня :)

 Смежные вопросы

  • Нет связанных вопросов^_^