Moyen Simple pour afficher les numéros de ligne sur WPF DataGrid
Je veux juste afficher les numéros de ligne dans la colonne de gauche de mon DataGrid
. Est-il un attribut pour ce faire?
Gardez à l'esprit, ce n'est pas une clé primaire de ma table. Je ne veux pas de ces numéros de ligne de se déplacer avec leurs lignes lorsqu'une colonne est triée. En gros, je veux un comte de course à pied. Il n'a même pas besoin d'avoir un en-tête.
- double possible de Comment afficher un index de ligne pour wpf toolkit datagrid?
- Peut-être-je missunderstood la question, voulez-vous avoir une colonne séparée pour cela ou est-RowHeader ok aussi?
RowHeader
est parfait, merci.- Si vous utilisez MSSQL Server 2005+, vous pouvez essayer: msdn.microsoft.com/en-us/library/ms186734.aspx
Vous devez vous connecter pour publier un commentaire.
Une façon est d'ajouter dans le LoadingRow événement pour le contrôle DataGrid
Lorsque des éléments sont ajoutés ou supprimés de la liste des sources, puis les nombres peuvent sortir de la synchronisation pour un certain temps. Un correctif à ce sujet, voir le comportement attaché ici:
WPF 4 DataGrid: Obtenir le Numéro de Ligne dans le RowHeader
Utilisable comme ce
LoadingRow
appelé pendant le tri, ce qui permettra de garder la rownumber toujours dans l'ordre?e.Row.Header = (e.Row.GetIndex() + 1).ToString();
HeadersVisibility
est fixé àAll
ouRow
.Columns
etNone
n'affichera pas que. Par exemple:<DataGrid HeaderVisibility="All"></DataGrid>
Ajouter une petite info à propos de Fredrik Hedblad réponse.
...Si vous voulez commencer la numérotation à partir de 1
Si votre grille de données a son ItemsSource lié à une collection, lier la AlternationCount propriété de votre grille de données, soit la propriété count de la collection, ou pour les Articles.Propriété Count de votre grille de données comme suit:
Ou:
Soit devrait fonctionner.
Ensuite, en supposant que vous êtes à l'aide d'un DataGridTextColumn pour votre colonne de gauche vous effectuez les opérations suivantes dans votre grille de données.Les colonnes définition:
Si vous ne voulez pas commencer à 0, vous pouvez ajouter un convertisseur à votre liaison à incrémenter l'index.
Et juste pour ajouter à la discussion sur ce... (j'ai passé trop de temps à trouver cela!).
Vous aurez besoin de définir les EnableRowVirtualization à Faux sur la grille de données pour éviter les erreurs dans la ligne de séquençage:
La
EnableRowVirtualization
propriété est définie àtrue
par défaut. Lorsque leEnableRowVirtualization
propriété est définie sur true, le contrôle DataGrid ne pas instancier unDataGridRow
objet pour chaque élément de données dans la source de données lié. Au lieu de cela, la grille de données crée DataGridRow des objets uniquement lorsqu'ils sont nécessaires, et les réutilise autant qu'il le peut. Référence MSDN iciC'est une vieille question, mais je voudrais partager quelque chose. J'ai eu un problème similaire, j'avais besoin d'un simple
RowHeader
la numération de lignes et de Fredrik Hedblad réponse était presque complet à mon problème.Tout ce qui est excellent:
mes en-têtes foiré lors de la suppression et l'ajout d'éléments. Si vous avez des boutons responsable pour que simplement d'ajouter
dataGrid.Items.Refresh();
en vertu de la suppression de code comme dans mon cas:Qui a résolu desyncronized la numération pour moi, parce que les éléments rafraîchissants appels
DataGrig_LoadingRow
de nouveau.Juste une autre réponse à fournir près de copie&pâte exemple (à ne pas encourager) pour de nouvelles personnes ou de personnes dans un rush, inspiré par les réponses à l'intérieur de ce poste par @GrantA et @Johan Larsson ( + de nombreuses autres personnes qui ont répondu aux nombreux posts sur le sujet)
Vous n'avez pas besoin de re-créer votre propre Propriété Attachée
Notez les parenthèses () autour de (ItemsControl.AlternationIndex) comme mis en garde dans Fredrik Hedblad répondre à Vérifier si la Ligne comme nombre impair
À l'aide des propriétés attachées, source complet ici.
Xaml:
Après quelques Tests avec
RowHeaderStyle
, la réparation et l'étendue de l'échantillon à partir de NGI: