![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| Человек01 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 20.2.2009 Где: Абакан, респ. Хак асия, Россия Репутация: 2 Всего: 2 |
Диспозиция:
Есть ListBox содержащий masterTable (id,name,id_d). detailsTable (id_d,name) Хочу сделать чтобы каждый Item ListBox-а содержал TextBlock(name) и ComboBox(id_d,name) то есть реализовать возможность пользователю заполнить содержимое masterTable/id_d используя осмысленные имена detailsTable, а не циферки Пытаюсь сделать так:
Ну и соответственно нечего не получается, вернее получается на одну четвертую. ComboBox содержит значения из detailsTable при выборе одного из них значения во всех ComboBox меняются на выбранное, не говоря о том что нечего не записывается в соответствующую колонку masterTable. А исходя из вышеизложенной организации вообще не понятно зачем было сделано dataSet.Relations.Add("megarelation", masterTable.Columns["id_d"], detailsTable.Columns["id_d"], true); Пытался сделать так: убрать
и заменить <CollectionViewSource x:Key="detailsSource"/> на <CollectionViewSource x:Key="detailsSource" Source="{Binding Source={StaticResource masterSource}, Path=megarelation}" /> но тогда ComboBox вообще пуст... Вопрос: как сделать так чтобы ComboBox содержал перечень detailsTable и позволял выбрать значение, апосля помещая в колонку masterTable соответствующий id_d Что то я окончательно запутался |
||||||
|
|||||||
| Человек01 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 20.2.2009 Где: Абакан, респ. Хак асия, Россия Репутация: 2 Всего: 2 |
В общем сделал. Можно сказать наверное через жо... с подвыподвертом...
Пишу сюда, вдруг кому нибудь пригодится. Первое все это делал применимо к DataGrid, логика с другими Controls при аналогичной задачи, практически не отличается... Теория: 1. Грузим основную таблицу(в DataTable), единственно добавляем к запросу это вызов интересующего нас поля связанной таблицы. Т.е. если у нас в основной таблице есть поле id_type и есть связанная таблица "type" c полями id_type и name, то соответственно запрос будет выглядеть: select ..., maintable.id_type, type.name... from maintable left outer join type on (type.id_type=maintable.id_type) 2. Грузим связанную таблицу(в DataTable) 2.5. Можно поместить а можно не помещать их в DataSet и связать(я просто поместил) 3. Создаем DataGrid и привязываем к нему основную таблицу datagrid1.ItemsSource = dataset.Tables[0].DefaultView; 4. Создаем CollectionViewSource и привязываем к нему вторую таблицу ((CollectionViewSource)Resources["typedoc"]).Source = dataset.Tables[1].DefaultView; 5. создаем для столбца DataGridTemplateColumn и реализуем два поведения столбца первое отображение данных второе редактирование данных. Для DataGrid - это делается через DataGridTemplateColumn.CellTemplate и DataGridTemplateColumn.CellEditingTemplate, соответственно. Для отображения, реализуем отображение текущего сотояния таблицы. А вот для редактирования создаем ComboBox с источником данных из второй таблицы, так же для ComboBox реализуем события загрузки(для установления текущего значения) и изменения выбора(для установления выбранного в основную таблицу) 6. И всё. Теперь практика:
Ну собственно и всё, вот такой вот извраще.. интересный вариант решения вопроса. Надеюсь кому нибудь пригодится Пользуемся и говорим Человеку спасибо P.S.: Тему не закрываю, может кто нить знает как это всё сделать правильно и изящно, что ли. Это сообщение отредактировал(а) Человек01 - 11.3.2009, 06:52 |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |