Привязка источника данных, но отображение чего-то другого - PullRequest
1 голос
/ 30 июня 2011

У меня довольно много мест, где мне нужно привязать элементы управления формы непосредственно к резервной базе данных.Для этого я использую LINQ to DataSet.

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

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

Трудно поверить, что эта проблема встречается не всемикто использует DataView.Есть ли способ переопределить поведение элементов управления формы, чтобы они отображали функцию своего значения?Например, если их значение равно v, тогда они отображают SomeMethod (v)?

Ответы [ 2 ]

0 голосов
/ 30 июня 2011

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

1) Вы можете подключиться к событию ComboBox Format . Это идеальное место для того, чтобы превратить ваши элементы данных в удобочитаемые для отображения элементы, и это действительно то, что вам нужно.

2) Вместо этого можно использовать классы LINQ to SQL и переопределить части .ToString () в частичных классах, чтобы отобразить данные, как вы хотите. Когда вы привязываете данные к объекту LINQ to SQL, ComboBox отображает строковое значение этого объекта.

Поскольку вы уже используете LINQ to DataSet, я просто подключился бы к событию Format.

0 голосов
/ 30 июня 2011

У меня довольно простой подход к этим вещам - если это не очень хорошо работает, просто придумайте модель представления, то есть компоновку объекта, предназначенную для отображения между моделью вашего домена и простой навигацией пользовательского интерфейса. Это также может побудить вас заполнить ваши данные в правильной форме для модели представления, а не для модели предметной области; и это часто дает приличную экономию с точки зрения уменьшения количества извлекаемых столбцов (а иногда и строк) и (возможно, что еще более важно) избегания многократных обращений к БД (путем выборки точно нужных данных за одно обращение , в правильной форме).

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

...