je suis tombé sur l » elegant and witty solutionMarc Gravell au problème posté par Matt (titre « C#/winforms: how to best bind a propertygrid and a System.Data.DataRow »), et ont utilisé même solution dans un de mes applications.À propos de RowWrapperDescriptor Marc Gravell pour la liaison System.Data.Rows à PropertyGrid
En utilisant des extraits du code de Marc:
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Foo", typeof(int));
table.Columns.Add("Bar", typeof(string));
table.Columns.Add("Audit", typeof(DateTime));
table.Rows.Add(1, 14, "abc", DateTime.MinValue);
DataRow row = table.Rows.Add(2,13,"def", DateTime.MinValue);
table.Rows.Add(3, 24, "ghi", DateTime.MinValue);
RowWrapper wrapper = new RowWrapper(row);
wrapper.Exclude.Add("ID");
wrapper.Exclude.Add("Bar");
j'ai pu faire en quelque sorte ce travail avec un DataGridView; DataGridView utilise la table comme source, tandis que chaque clic sur une ligne de DataGridView est défini en tant que SelectedObject pour la propriété propertyGrid1 (en utilisant RowWrapper de Marc), et cela fonctionne parfaitement. Vous pouvez demander pourquoi je fais cela, ce qui signifie utiliser DataGridView et PropertyGrid; En fait, les exigences commerciales et les politiques de gestion étroites d'esprit.
De toute façon, j'ai maintenant un autre dilemna; une des colonnes de la table, par exemple "Foo" (qui apparaît dans le PropertyGrid comme l'un des champs, par exemple), devrait être une sorte de liste déroulante dans le PropertyGrid. Ce que je veux dire, "Foo" devrait être une liste déroulante contenant une liste d'éléments dérivés d'un autre DataTable. En outre, existe-t-il un moyen d'inclure une sorte de description pour chaque élément de champ?
Est-ce que cela pourrait être fait? Marc Gravell a mentionné quelque chose comme "" Notez que vous pouvez faire d'autres choses dans cette zone pour rendre certaines propriétés non éditables (IsReadOnly), ou avoir une légende différente (DisplayName), ou category (Category) - en remplaçant les autres membres RowWrapperDescriptor "comme la note de fin à son poste, et je me demandais est il ya un moyen de le faire.
Tout conseil théorique est grandement apprécié. Merci beaucoup.
Cela pourrait être une bonne idée de prendre du recul; quel est l'effet que vous essayez d'atteindre? Donc: vous avez un 'DataTable'; et vous voulez ...? [remplir en blanc ici ...]. –
La "manière de faire ceci" est exactement comme mentionné; override 'IsReadOnly' ou' DisplayName' etc. Il n'y a pas de "catégorie" dans un 'DataGridView'. Pour la liste déroulante, je suppose que vous devrez le faire manuellement en changeant les propriétés 'DataGridView' sur la colonne (en ajoutant probablement la colonne manuellement comme une colonne déroulante); mais sans plus d'informations sur ce qui marche/ne fonctionne pas, il est difficile d'être plus précis. –