Comment faire pour changer la façon dont les données sont affichées dans WPF GridControl?
Je suis en train d'utiliser GridControl
de DevExpress, mais je ne peux pas faire la même chose j'ai l'habitude de faire dans ListView
avec un GridView
View
.
Je n'ai à la fois l'approche. À l'aide de DisplayMemberBinding
et CellTemplate
. Les deux ne montrent rien. Le Code ci-dessous (j'ai enlevé certaines colonnes):
<dxg:GridControl ItemsSource="{Binding}" Name="gridControl1">
<dxg:GridControl.Columns>
<dxg:GridColumn Header="Teste" DisplayMemberBinding="{Binding DataNascimento}"/>
<dxg:GridColumn Header="Nome">
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Nome}"/>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView Name="tableView1" AutoWidth="True" />
</dxg:GridControl.View>
</dxg:GridControl>
Il est montré comme cette image:
Vous pouvez voir mes colonnes mais pas de données. J'ai tenu 3 éléments et il affiche 3 lignes. Les données lui-même est lié mais il semble que le modèle n'a pas été montrée.
J'ai essayé la même approche de cette question mais ne fonctionne pas pour moi.
Les élèves de ma classe ont INotifyPropertyChanged
et j'ai utilisé un ObservableCollection<T>
avant bindind à la GridControl
.
La seule façon dont cela fonctionne est, si je retire presque tous les code et de modifier le AutoPopulateColumns
à True
. Mais dans certains cas, je veux un format personnalisé et ne peut pas atteindre avec cette option.
Edit1:
Je l'ai fait en mode de Conception et de travaux:
<dxg:GridColumn FieldName="DataNascimento" Name="gridColumn3">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="{}{0:dd/MM/yyyy HH:mm:ss}" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
Edit2:
Tenté la même approche @blindmeis
suggère avec grille et il fonctionne comme je l'spected:
<DataGrid AutoGenerateColumns="False" Grid.Row="2" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding DataNascimento}" Header="Nascimento" />
<DataGridTextColumn Binding="{Binding Nome}" Header="Header" />
<DataGridTemplateColumn Header="Teste">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Nome}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
On dirait que cette approche fonctionne dans les deux ListView
et DataGrid
. Malheureusement GridControl
se comporte de façon différente.
À l'aide de <dxg:GridColumn.EditSettings>
est la bonne façon?
Juste essayé. Je peux utiliser presque la même approche. Je peux utiliser
DataGridTemplateColumn
et de fournir ce que je veux. Mais j'ai vraiment besoin de beaucoup de fonctionnalités fournies par GridControl
. Merci. Viens d'apprendre que DataGrid
a DataGridTemplateColumn
.
OriginalL'auteur Vitor Canova | 2012-07-02
Vous devez vous connecter pour publier un commentaire.
- Elle fin à un problème plus compliqué.
Comme je l'avais mentionné ci-dessus dans mon edit
TextEditSettings
fait ce que je voulais dans ce cas particulièrement. Mais dès que j'ai amélioré le code de quelques bugs ont commencé à apparaître.Le problème que j'ai rencontrés après ce qui est mentionné ici à l'officiel DevExpress forum et je suis a résumé ci-après:
Le vrai problème
J'ai été en utilisant une classe de base pour certains de ces rapports et de ces grilles, j'ai été à l'aide de leurs dérivés classes.
La solution que j'ai eu de mentionner dans ma question travaille dans un nom dérivé de la classe mais moi quand j'ai commencé à utiliser les propriétés de la classe de base et le dérivé de la classe un comportement étrange a commencé à se produire.
À l'aide de la
TextEditSettings
avecFieldName
j'ai pu formater les données et de montrer son résumé pour les propriétés de la dérivée de la classe, mais pour les propriétés de la classe de base, il n'a pas de travail.Donc j'ai changé pour
DisplayMemberBinding
et il a travaillé avec toutes les propriétés, mais le résumé cessé le travail.La solution
À faire format option disponible pour les propriétés à partir de votre classe et propriétés héritées et à faire un travail de synthèse correctement, vous devez l'utiliser comme ceci:
Dans ce cas, il va travailler dans le
Percent
de la propriété qui a été hérité. LeDisplayMemberBinding
va le faire travailler pour laTextEditSettings
et laFieldName
dans leGridColumn
est utilisé pour faire le résumé d'obtenir que la propriété deGridSummaryItem
.OriginalL'auteur Vitor Canova
j'étais juste besoin de formater un texte, mais apparemment, DevExpress GridControl, ne prend pas en charge StringFormat.
Après diverses intentions, j'ai été en mesure de gérer la mise en forme.
Je remplir ma grille à l'aide d'une ObservableCollection. Les colonnes sont:
Prix, de type double, à savoir: 15
Symbole, type de données chaîne de caractères, c'est à dire: US$
et le format que je m'attendais à: 15,00$ US
C'est la façon dont j'ai l'habitude de le faire avec un DataGrid
Voici comment je le fais. Notez que dans le "Chemin de Liaison" le champ doit être précédée par des Données. et a avoir RelativeSource="{RelativeSource Self}", ou il ne fonctionnera pas.
Et ici le convertisseur:
OriginalL'auteur jrivam
Si vous liez votre grille de données avec collection observable à partir de votre modèle de vue et si votre collection observable ont DataNascimento et Nome comme deux champs, puis vous n'avez pas à les lier de nouveau comme vous l'avez fait. Vous pouvez donner directement de l'fieldname et elle remplit les colonnes avec des valeurs à partir de votre collection observable.
Vous pouvez faire quelque chose comme ceci:
OriginalL'auteur sunil5715