Вложенные сетки данных WPF

У меня есть DataGrid (из инструментария), и я хочу вложить еще один DataGrid в DataGrid.RowDetailsTemplate. Хитрость заключается в том, что я хочу вернуть данные из одной таблицы в основную сетку, а затем на основе выбора строки перейти и получить дополнительные сведения из другой таблицы и показать их в DataGrid в шаблоне сведений.

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

Это вообще возможно? Если да, может ли кто-нибудь указать мне в правильном направлении. Я должен отметить, что я использую классы LinqToSql для заполнения данных.

Спасибо за внимание. -Джоэл


person jvberg    schedule 15.05.2009    source источник
comment
Во имя всего доброго и святого, пожалуйста, пожалуйста, не вставляйте datagrid в другое datagrid.   -  person Greg D    schedule 02.05.2010
comment
@GregD, не могли бы вы объяснить, почему бы вам не сделать что-то подобное?   -  person SoftwareSavant    schedule 13.06.2013
comment
За исключением необработанной СУБД, DataGrid практически всегда неудобен для пользователя. Он тяжелый, сложный, насыщенный, не содержит эффективной контекстной информации и свидетельствует о неспособности разработать хороший UX. Наложение тяжелого, сложного элемента управления на другой тяжелый, сложный элемент управления — это просто кошмарный сценарий. Если у вас есть иерархические данные, рассмотрите возможность копирования парадигмы проводника Windows. Облегченный список в сочетании с древовидным управлением — это очень известная и понятная парадигма. Не вкладывать сетку данных в другую сетку данных.   -  person Greg D    schedule 14.06.2013


Ответы (1)


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

ГайТаблица

  • Имя
  • Фамилия
  • Уникальный идентификатор

ГайДействияТаблица

  • Уникальный идентификатор
  • ПареньID
  • Описание действия

Я создал отношение «один ко многим» из GuyTable.UniqueID в GuyActionsTable.GuyID, которое называется «GuyActions».

Затем я привязываю свой DataGrid следующим образом. Извините за любые ошибки, так как я делаю это вручную:

<w:DataGrid ItemsSource={Binding Source={StaticResource YourDataSource}}>
<w:DataGrid.RowDetailsTemplate>
    <DataTemplate>
        <w:DataGrid ItemsSource={Binding GuyActions}>
            <w:DataGrid.Columns>
                <w:DataGridTextColumn Header="Action" DisplayMemberBinding="{Binding Action_Description}" />
            </w:DataGrid.Columns>
        </w:DataGrid>
    </DataTemplate>
</w:DataGrid.RowDetailsTemplate>
<w:DataGrid.Columns>
    <w:DataGridTextColumn Header="First Name" DisplayMemberBinding="{Binding First_Name}" />
    <w:DataGridTextColumn Header="Last Name" DisplayMemberBinding="{Binding Last_Name}" />
</w:DataGrid.Columns>

person sidney.andrews    schedule 29.10.2009