La liaison WPF DataGrid à DataTable à l'aide de TemplateColumns
J'ai tout essayé et suis nulle part, donc je suis en espérant que quelqu'un peut me donner le moment aha.
Je ne peut tout simplement pas obtenir la liaison pour extraire les données dans la grille de données avec succès.
J'ai une Table qui contient plusieurs colonnes avec des MyDataType
public class MyData
{
string nameData {get;set;}
bool showData {get;set;}
}
MyDataType a 2 propriétés (Une chaîne de caractères, booléen)
J'ai créé un test DataTable
DataTable GetDummyData()
{
DataTable dt = new DataTable("Foo");
dt.Columns.Add(new DataColumn("AnotherColumn", typeof(MyData)));
dt.Rows.Add(new MyData("Row1C1", true));
dt.Rows.Add(new MyData("Row2C1", false));
dt.AcceptChanges();
return dt;
}
J'ai un WPF DataGrid qui je veux montrer ma DataTable.
Mais tout ce que je veux faire est de changer la façon dont chaque cellule est rendu à montrer [TextBlock][Bouton] par cellule avec les valeurs liées à la MyData objet et c'est là que je vais avoir une tonne de problèmes.
Mon XAML ressemble à ceci
<Window.Resources>
<ResourceDictionary>
<DataTemplate x:Key="MyDataTemplate" DataType="MyData">
<StackPanel Orientation="Horizontal" >
<Button Background="Green" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5,0,0,0" Content="{Binding Path=nameData}"></Button>
<TextBlock Background="Green" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5,0,0,0" Text="{Binding Path=nameData}"></TextBlock>
</StackPanel>
</DataTemplate>
</ResourceDictionary>
</Window.Resources>
<Grid>
<dg:DataGrid Grid.Row="1" ItemsSource="{Binding}" AutoGenerateColumns="True"
x:Name="dataGrid1" SelectionMode="Single" CanUserAddRows="False"
CanUserSortColumns="true" CanUserDeleteRows="False" AlternatingRowBackground="AliceBlue"
AutoGeneratingColumn="dataGrid1_AutoGeneratingColumn" />
</Grid>
Maintenant tout ce que je fais une fois le fichier chargé est de tenter de lier le DataTable à la WPF DataGrid
dt = GetDummyData();
dataGrid1.ItemsSource = dt.DefaultView;
Le TextBlock et Bouton montrer, mais ils ne se lient pas, ce qui leur laisse du vide.
Quelqu'un pourrait-il me faire savoir si ils ont une idée de comment résoudre ce problème.
Cela devrait être simple, c'est ce que Microsoft nous pousse à le croire.
J'ai mis le Column.CellTemplate
au cours de la AutoGenerating
événement et vous ne recevez toujours pas de liaison.
S'il vous plaît aider!!!
Déjà fait et toujours la même chose. Rien ne change sur le UIElements comme ils semblent être indépendant. J'ai essayé d'utiliser le AutoGeneratingColumn Événement pour définir mon propre Colonne.CellTemplate et toujours rien. D'autres idées? Merci Merci
Essayez ceci: C# Lire Excel et Montrer dans WPF DataGrid
OriginalL'auteur Chris J | 2010-04-20
Vous devez vous connecter pour publier un commentaire.
Edit: mis à Jour pour refléter l'entrée du val d'Aran Mulholland (voir le commentaire)
Apparemment le
DataGrid
est en train de passer l'ensemble de laDataRowView
à chaque cellule. C'est pourquoi la liaison ne fonctionne pas. VotreDataTemplate
attend leDataContext
pour être de typeMyData
, mais il est plutôt de typeDataRowView
. Mon projet (un peu hack-ish) pour obtenir le contournementDataContext
que vous voulez est de créer un personnaliséDataGridTemplateColumn
qui va extraire l'élément nécessaire de laDataRowView
. Le code est ci-dessous:Remarque: Cette approche ne semble fonctionner avec la virtualisation du conteneur hors tension ou en mode Standard. Si le VirtualizationMode est définie pour le Recyclage le modèle n'est pas appliquée.
Je suis d'accord. Si c'était mon projet, je voudrais essayer d'éviter de faire les choses de cette façon. Malheureusement, les exigences du projet (par exemple, les colonnes dynamiques) parfois ne pas vous laisser beaucoup de place pour faire les choses de la manière "propre".
Oh WOW. GÉNIAL. Il fonctionne..Merci. Qui répond à la question à 100%. J'avais compris que c'était la Ligne passée, mais ne pouvait pas comprendre comment accéder à l'élément de ce point de vue se lier à. Merci beaucoup. Malheureusement, je ne vois pas comment vous pourriez éviter de faire les choses de cette façon, sans en connaître les données à l'avance. Qui un peu de défaites le but d'avoir un flexible datagrid qui fonctionne avec pas de stock de colonnes. Définition de vos propres DataTemplateColumn pour les cas où le type de données est hors stock columntype, j'aurais pensé que cela fonctionnerait droit sorti de la boîte. Je peux rêver, je suppose.
OriginalL'auteur Joseph Sturtevant
Après avoir trouvé ce fil et de la difficulté avec le code présenté ici, j'ai couru à travers ce fil de discussion sur MSDN, et il fonctionne beaucoup mieux! Pas de virtualisation des problèmes à tous si loin que j'ai vu.
http://social.msdn.microsoft.com/Forums/en/wpf/thread/8b2e94b7-3c44-4642-8acc-851de5285062
Code:
OriginalL'auteur Quintalea