Options de dimensionnement dans le contrôle DataGridView Windows Forms

DataGridView les lignes, les colonnes et les en-têtes peuvent modifier la taille en raison de nombreuses occurrences différentes. Le tableau suivant présente ces occurrences.

Occurrence Description
Redimensionnement de l’utilisateur Les utilisateurs peuvent effectuer des ajustements de taille en faisant glisser ou en double-cliquant sur les séparateurs de ligne, de colonne ou d’en-tête.
Redimensionnement du contrôle En mode remplissage de colonne, les largeurs de colonne changent lorsque la largeur du contrôle change ; par exemple, lorsque le contrôle est ancré à son formulaire parent et que l’utilisateur redimensionne le formulaire.
Modification de la valeur de cellule Dans les modes de dimensionnement automatique basés sur le contenu, les tailles changent pour s’adapter aux nouvelles valeurs d’affichage.
Appel de méthode Le redimensionnement basé sur le contenu programmatique vous permet d’effectuer des ajustements de taille opportunistes en fonction des valeurs de cellule au moment de l’appel de méthode.
Paramètre de propriété Vous pouvez également définir des valeurs de hauteur et de largeur spécifiques.

Par défaut, le redimensionnement de l’utilisateur est activé, le dimensionnement automatique est désactivé et les valeurs de cellule plus larges que leurs colonnes sont clippées.

Le tableau suivant présente des scénarios que vous pouvez utiliser pour ajuster le comportement par défaut ou utiliser des options de dimensionnement spécifiques pour obtenir des effets particuliers.

Scénario Implémentation
Utilisez le mode de remplissage des colonnes pour afficher des données de taille similaire dans un nombre relativement faible de colonnes qui occupent toute la largeur du contrôle sans afficher la barre de défilement horizontale. Définissez la propriété AutoSizeColumnsMode sur Fill.
Utilisez le mode de remplissage de colonne avec des valeurs d’affichage de tailles variables. Définissez la propriété AutoSizeColumnsMode sur Fill. Initialisez les largeurs de colonne relatives en définissant les propriétés de colonne FillWeight ou en appelant la méthode de contrôle AutoResizeColumns après avoir rempli le contrôle avec des données.
Utilisez le mode de remplissage de colonne avec des valeurs d’importance variable. Définissez la propriété AutoSizeColumnsMode sur Fill. Définissez de grandes MinimumWidth valeurs pour les colonnes qui doivent toujours afficher certaines de leurs données ou utiliser une option de dimensionnement autre que le mode de remplissage pour des colonnes spécifiques.
Utilisez le mode de remplissage de colonne pour éviter d’afficher l’arrière-plan du contrôle. Définissez la AutoSizeMode propriété de la dernière colonne Fill sur et utilisez d’autres options de dimensionnement pour les autres colonnes. Si les autres colonnes utilisent trop d’espace disponible, définissez la MinimumWidth propriété de la dernière colonne.
Afficher une colonne à largeur fixe, telle qu’une icône ou une colonne ID. Défini AutoSizeMode sur None et Resizable sur False la colonne. Initialisez sa largeur en définissant la Width propriété ou en appelant la méthode de contrôle AutoResizeColumn après avoir rempli le contrôle avec des données.
Ajustez automatiquement les tailles chaque fois que le contenu des cellules change pour éviter le découpage et optimiser l’utilisation de l’espace. Définissez une propriété de dimensionnement automatique sur une valeur qui représente un mode de dimensionnement basé sur le contenu. Pour éviter une pénalité de performances lors de l’utilisation de grandes quantités de données, utilisez un mode de dimensionnement qui calcule uniquement les lignes affichées.
Ajustez les tailles pour ajuster les valeurs dans les lignes affichées afin d’éviter les pénalités de performances lors de l’utilisation de nombreuses lignes. Utilisez les valeurs d’énumération en mode dimensionnement appropriées avec le redimensionnement automatique ou programmatique. Pour ajuster les tailles pour ajuster les valeurs dans les lignes nouvellement affichées lors du défilement, appelez une méthode de redimensionnement dans un gestionnaire d’événements Scroll . Pour personnaliser le redimensionnement en double-clic de l’utilisateur afin que seules les valeurs des lignes affichées déterminent les nouvelles tailles, appelez une méthode de redimensionnement dans un gestionnaire d’événements ou ColumnDividerDoubleClick d’un RowDividerDoubleClick gestionnaire d’événements.
Ajustez les tailles pour ajuster le contenu des cellules uniquement à des moments spécifiques pour éviter les pénalités de performances ou pour permettre le redimensionnement de l’utilisateur. Appelez une méthode de redimensionnement basée sur le contenu dans un gestionnaire d’événements. Par exemple, utilisez l’événement DataBindingComplete pour initialiser des tailles après la liaison, et gérez l’événement ou CellValueChanged l’événement CellValidated pour ajuster les tailles afin de compenser les modifications de l’utilisateur ou les modifications apportées à une source de données liée.
Ajustez les hauteurs de ligne pour le contenu des cellules multilignes. Assurez-vous que les largeurs de colonne sont appropriées pour afficher les paragraphes de texte et utiliser le dimensionnement automatique ou programmatique de ligne basé sur le contenu pour ajuster les hauteurs. Vérifiez également que les cellules contenant du contenu multiligne sont affichées à l’aide d’une WrapMode valeur de style de cellule .True

En règle générale, vous allez utiliser un mode de dimensionnement automatique de colonne pour conserver des largeurs de colonne ou les définir sur des largeurs spécifiques avant que les hauteurs de ligne ne soient ajustées.

Redimensionnement avec la souris

Par défaut, les utilisateurs peuvent redimensionner des lignes, des colonnes et des en-têtes qui n’utilisent pas de mode de dimensionnement automatique en fonction des valeurs de cellule. Pour empêcher les utilisateurs de redimensionner avec d’autres modes, tels que le mode de remplissage de colonne, définissez une ou plusieurs des propriétés suivantes DataGridView :

Vous pouvez également empêcher les utilisateurs de redimensionner des lignes ou des colonnes individuelles en définissant leurs Resizable propriétés. Par défaut, la valeur de la Resizable propriété est basée sur la AllowUserToResizeColumns valeur de propriété pour les colonnes et la AllowUserToResizeRows valeur de propriété pour les lignes. Si vous définissez ResizableTrue explicitement ou False, toutefois, la valeur spécifiée remplace la valeur de contrôle pour cette ligne ou cette colonne. Défini Resizable pour NotSet restaurer l’héritage.

Étant donné que NotSet restaure l’héritage de la valeur, la Resizable propriété ne renvoie jamais de NotSet valeur, sauf si la ligne ou la colonne n’a pas été ajoutée à un DataGridView contrôle. Si vous devez déterminer si la Resizable valeur de propriété d’une ligne ou d’une colonne est héritée, examinez sa State propriété. Si la State valeur inclut l’indicateur ResizableSet , la valeur de propriété Resizable n’est pas héritée.

Dimensionnement automatique

Il existe deux types de dimensionnement automatique dans le DataGridView contrôle : le mode de remplissage de colonne et le dimensionnement automatique basé sur le contenu.

Le mode de remplissage des colonnes visibles dans le contrôle permet de remplir la largeur de la zone d’affichage du contrôle. Pour plus d’informations sur ce mode, consultez le mode remplissage de colonne dans le contrôle DataGridView Windows Forms.

Vous pouvez également configurer des lignes, des colonnes et des en-têtes pour ajuster automatiquement leurs tailles en fonction de leur contenu de cellule. Dans ce cas, l’ajustement de la taille se produit chaque fois que le contenu des cellules change.

Remarque

Si vous conservez des valeurs de cellule dans un cache de données personnalisé à l’aide du mode virtuel, le dimensionnement automatique se produit lorsque l’utilisateur modifie une valeur de cellule, mais ne se produit pas lorsque vous modifiez une valeur mise en cache en dehors d’un gestionnaire d’événements CellValuePushed . Dans ce cas, appelez la UpdateCellValue méthode pour forcer le contrôle à mettre à jour l’affichage des cellules et appliquer les modes de dimensionnement automatiques actuels.

Si le dimensionnement automatique basé sur le contenu est activé uniquement pour une dimension, c’est-à-dire pour les lignes, mais pas les colonnes, ou pour les colonnes, mais pas les lignes, et est également activé, l’ajustement WrapMode de la taille se produit également chaque fois que l’autre dimension change. Par exemple, si les lignes, mais pas les colonnes, sont configurées pour le dimensionnement automatique et WrapMode sont activées, les utilisateurs peuvent faire glisser des séparateurs de colonnes pour modifier la largeur d’une colonne et des hauteurs de ligne s’ajustent automatiquement afin que le contenu des cellules soit toujours entièrement affiché.

Si vous configurez à la fois les lignes et les colonnes pour le dimensionnement automatique basé sur le contenu et WrapMode est activé, le contrôle ajuste les tailles chaque fois que le DataGridView contenu de la cellule a changé et utilise un ratio idéal de hauteur de cellule à largeur lors du calcul de nouvelles tailles.

Pour configurer le mode de dimensionnement pour les en-têtes et les lignes et pour les colonnes qui ne remplacent pas la valeur de contrôle, définissez une ou plusieurs des propriétés suivantes DataGridView :

Pour remplacer le mode de dimensionnement de colonne du contrôle pour une colonne individuelle, définissez sa AutoSizeMode propriété sur une valeur autre que NotSet. Le mode de dimensionnement d’une colonne est réellement déterminé par sa InheritedAutoSizeMode propriété. La valeur de cette propriété est basée sur la valeur de propriété de AutoSizeMode la colonne, sauf si cette valeur est NotSet, auquel cas la valeur du AutoSizeColumnsMode contrôle est héritée.

Utilisez le redimensionnement automatique basé sur le contenu avec précaution lors de l’utilisation de grandes quantités de données. Pour éviter les pénalités de performances, utilisez les modes de dimensionnement automatique qui calculent les tailles uniquement en fonction des lignes affichées plutôt que d’analyser chaque ligne du contrôle. Pour des performances maximales, utilisez le redimensionnement programmatique à la place pour pouvoir redimensionner à des moments spécifiques, par exemple immédiatement après le chargement de nouvelles données.

Les modes de dimensionnement automatique basés sur le contenu n’affectent pas les lignes, les colonnes ou les en-têtes que vous avez masqués en définissant la propriété de ligne ou de colonne Visible ou le contrôle RowHeadersVisible ou ColumnHeadersVisible les propriétés sur false. Par exemple, si une colonne est masquée une fois qu’elle est automatiquement dimensionnée pour s’adapter à une valeur de cellule volumineuse, la colonne masquée ne modifie pas sa taille si la ligne contenant la valeur de cellule volumineuse est supprimée. Le dimensionnement automatique ne se produit pas lorsque la visibilité change, de sorte que la modification de la propriété true de colonne Visible ne la force pas à recalculer sa taille en fonction de son contenu actuel.

Le redimensionnement basé sur le contenu programmatique affecte les lignes, les colonnes et les en-têtes, quelle que soit leur visibilité.

Redimensionnement par programmation

Lorsque le dimensionnement automatique est désactivé, vous pouvez définir par programme la largeur ou la hauteur exacte des lignes, des colonnes ou des en-têtes via les propriétés suivantes :

Vous pouvez également redimensionner par programmation des lignes, des colonnes et des en-têtes pour qu’ils correspondent à leur contenu à l’aide des méthodes suivantes :

Ces méthodes redimensionnent des lignes, des colonnes ou des en-têtes une seule fois plutôt que de les configurer pour le redimensionnement continu. Les nouvelles tailles sont automatiquement calculées pour afficher tout le contenu des cellules sans découpage. Lorsque vous redimensionnez par programmation des colonnes qui ont InheritedAutoSizeMode des valeurs de Fillpropriété, toutefois, les largeurs calculées basées sur le contenu sont utilisées pour ajuster proportionnellement les valeurs des propriétés de colonne FillWeight , et les largeurs de colonne réellement sont ensuite calculées en fonction de ces nouvelles proportions afin que toutes les colonnes remplissent la zone d’affichage disponible du contrôle.

Le redimensionnement par programmation est utile pour éviter les pénalités de performances avec le redimensionnement continu. Il est également utile de fournir des tailles initiales pour les lignes, colonnes et en-têtes redimensionnables par l’utilisateur, ainsi que pour le mode de remplissage des colonnes.

Vous appelez généralement les méthodes de redimensionnement par programmation à des moments spécifiques. Par exemple, vous pouvez redimensionner par programmation toutes les colonnes immédiatement après le chargement des données, ou vous pouvez redimensionner par programmation une ligne spécifique une fois qu’une valeur de cellule particulière a été modifiée.

Personnalisation du comportement de dimensionnement basé sur le contenu

Vous pouvez personnaliser les comportements de dimensionnement lors de l’utilisation des types de cellules, de lignes et de colonnes dérivés DataGridView en remplaçant les DataGridViewColumn.GetPreferredWidthDataGridViewCell.GetPreferredSizeDataGridViewRow.GetPreferredHeightsurcharges de méthode de redimensionnement protégées ou en appelant des surcharges de méthode de redimensionnement protégées dans un contrôle dérivé.DataGridView Les surcharges de méthode de redimensionnement protégées sont conçues pour fonctionner en paires pour obtenir un ratio idéal de hauteur à largeur de cellule, évitant ainsi des cellules trop larges ou hautes. Par exemple, si vous appelez la AutoResizeRows(DataGridViewAutoSizeRowsMode,Boolean) surcharge de la AutoResizeRows méthode et passez une valeur du falseBoolean paramètre, la surcharge calcule les hauteurs et largeurs idéales pour les cellules de la ligne, mais elle ajuste uniquement les hauteurs de ligne. Vous devez ensuite appeler la AutoResizeColumns méthode pour ajuster les largeurs de colonne à l’idéal calculé.

Options de dimensionnement basées sur le contenu

Les énumérations utilisées par les propriétés de dimensionnement et les méthodes ont des valeurs similaires pour le dimensionnement basé sur le contenu. Avec ces valeurs, vous pouvez limiter les cellules utilisées pour calculer les tailles préférées. Pour toutes les énumérations de dimensionnement, les valeurs avec des noms qui font référence à des cellules affichées limitent leurs calculs aux cellules dans les lignes affichées. L’exclusion de lignes est utile pour éviter une pénalité de performances lorsque vous travaillez avec une grande quantité de lignes. Vous pouvez également restreindre les calculs aux valeurs de cellule dans les cellules d’en-tête ou de non-tête.

Voir aussi