2009-05-15 7 views
7

J'ai un DataGrid (à partir de la boîte à outils) et je souhaite imbriquer un autre DataGrid dans le DataGrid.RowDetailsTemplate. L'astuce est que je veux ramener les données d'une table dans la grille principale, puis, en fonction de la sélection de ligne aller et obtenir des détails supplémentaires à partir d'une table différente et l'afficher dans le DataGrid dans le modèle de détail.Les DataGrids WPF imbriqués

Ceci est assez facile à faire dans 2 DataGrids séparés, mais j'ai du mal à le faire fonctionner avec la version imbriquée.

Est-ce encore possible? Si oui, quelqu'un pourrait me diriger dans la bonne direction. Je devrais noter que j'utilise des classes de LinqToSql pour peupler les données.

Merci de votre considération. -Joel

+2

Au nom de tout ce qui est bon et saint, s'il vous plaît plaire _please_ ne nichent pas un '' datagrid' dans un autre datagrid'. –

+0

@GregD pouvez-vous expliquer pourquoi vous ne feriez pas quelque chose comme ça? – SoftwareSavant

+0

A l'exception d'un SGBD brut, un DataGrid est pratiquement toujours une mauvaise expérience utilisateur. C'est lourd, c'est complexe, c'est dense, ça n'inclut aucune information contextuelle efficace, et c'est révélateur d'un échec à concevoir un bon ux. Superposer le contrôle lourd et complexe avec un autre contrôle lourd et complexe est juste un scénario cauchemardesque. Si vous avez des données hiérarchiques, pensez à copier le paradigme de l'Explorateur Windows. La vision de liste plus légère combinée avec un contrôle d'arbre est un paradigme bien connu et bien compris. Do _not_ imbrique un DataGrid dans un autre DataGrid. –

Répondre

5

Si vous utilisez LinqToSQL, vous pouvez facilement le faire en utilisant une association. Dans ma pratique, je l'ai créé deux tables:

GuyTable

  • Prénom
  • Nom
  • UniqueID

GuyActionsTable

  • UniqueID
  • GuyID
  • Action Description

J'ai créé un-à-plusieurs de GuyTable.UniqueID à GuyActionsTable.GuyID appelé "GuyActions"

Je lie alors mon DataGrid comme ça. Excusez les erreurs que je fais cela à la main:

<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> 

Questions connexes