Привязка структуры, содержащей хеш-таблицу к сетке - PullRequest
0 голосов
/ 30 сентября 2010

Я пытаюсь создать сводную таблицу перевода. В основном таблица выглядит так:

SystemText (Категория, Имя, LanguageCode, Текст)

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

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

Категория | Имя | Английский | Французский | Немецкий

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

Dim test = From systemText In _systemTexts _
           Group systemText By Key = New With {Key systemText.TextCategory, Key systemText.TextName} Into g = Group _
           Select New With {Key .TextCategory = Key.TextCategory, _
                            Key .TextName = Key.TextName, _
                                .Languages = g.ToDictionary(Function(st) st.LanguageCode, Function(st) st.Description)}

Теперь единственная проблема, которую я имею, - это привязать объекты к моему сеточному листу. Я бы создавал столбцы сетки динамически при загрузке формы, в зависимости от доступных языков. Я думал, что использование чего-то вроде Languages ​​("EN") в свойстве DataMember будет работать, но это не так.

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

1 Ответ

0 голосов
/ 04 октября 2010

Итак, после некоторых проб и ошибок я перестал искать способы сделать это.

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

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

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

Наконец то, что я заканчиваю, это динамическое создание DataTable, вставка в него результата запроса Linq, привязка DataTable к сетке и, наконец, прослушивание события RowUpdated и выполнение операций CRUD с коллекциями NHibernate. Он работает довольно хорошо, и код легко понять.

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