web-dev-qa-db-fra.com

DataGridView, Ajuster la largeur et la hauteur à DataTable

Je lie un DataTable à GridView. Il ne s'adapte pas à la hauteur et à la largeur du DataTable. Comment puis-je strech la largeur de la grille que je montre toutes les colonnes et la hauteur se rétrécit si les lignes sont peu nombreuses.

enter image description here

13
Gainster

il suffit d'aller dans les propriétés de votre datagrid =>

puis à la section Layout =>

AutoSizeColumnsMode définissez-le sur Remplir ...

21
ProblemAnswerQue

Pour redimensionner automatiquement les colonnes en fonction des données (en largeur), puis en redimensionner le formulaire en fonction de gridview (en largeur), utilisez le code suivant:

foreach (DataGridViewColumn column in dataGridView1.Columns)
                column.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;

this.Width = dataGridView1.Width + 100;

où dataGridView1 est le nom de la vue Datagridview dans cet exemple et this fait référence à l'instance du formulaire. Le nombre 100 est une constante pour le nombre de pixels plus large du formulaire par rapport au champ datagridview. (Remarque: vous souhaiterez peut-être une vérification de la largeur pour vous assurer que le formulaire et les données gridview ne sont pas plus larges que l'écran de l'utilisateur).

Pour redimensionner automatiquement le datagridview afin qu'il tienne sur les lignes (en hauteur), puis le formulaire pour qu'il s'adapte à la vue en grille (en hauteur), utilisez le code suivant:

int totalRowHeight = dataGridView1.ColumnHeadersHeight;

foreach (DataGridViewRow row in dataGridView1.Rows)
    totalRowHeight += row.Height;

dataGridView1.Height = totalRowHeight;
this.Height = dataGridView1.Height + 100;

où dataGridView1 est le nom de la vue Datagridview dans cet exemple et this fait référence à l'instance du formulaire. Le nombre 100 est une constante pour combien de pixels plus haut vous voulez le formulaire que le datagridview. (Remarque: vous souhaiterez peut-être une vérification de la hauteur pour vous assurer que le formulaire et les données gridview ne sont pas plus hauts que l'écran de l'utilisateur).

3
Jason Moore

Tout d'abord, votre formulaire doit être suffisamment grand pour que DataGridView puisse se développer et afficher toutes les colonnes. Dans la capture d'écran, cela ne semble pas assez large. Vous pouvez définir la taille de la propriété datagridview manuellement, mais il est rare que vous connaissiez la largeur exacte de chaque colonne au moment de la conception car vous ne savez pas combien il y en aura dans chaque colonne au moment de l'exécution. Par exemple, votre colonne Invoicedescription peut avoir des chaînes dont la longueur varie.

Ce que je fais généralement dans des cas comme le vôtre est de mettre un contrôle de fractionnement sur le formulaire La zone de texte en haut et le bouton Importer les factures vont dans le panneau supérieur du contrôle de fractionnement, et DataGridView, dans le panneau inférieur. Ensuite, définissez la propriété Dock de DataGridView pour remplir le panneau inférieur du contrôle de fractionnement. De cette façon, lorsque l'utilisateur redimensionne le formulaire, le DataGridView s'agrandit/diminue.

Vous pouvez contrôler davantage l’apparence des colonnes en définissant la propriété DataGridView.AutoResizeRows.

Donnant simplement cela comme une option, je ne connais aucun moyen de redimensionner automatiquement la grille en fonction des données qu’elle affiche. Vous pourrez peut-être calculer la hauteur/largeur des lignes, puis redimensionner manuellement la grille en code, mais je m'assurerais que j'avais vraiment besoin de cette exigence au préalable.

2
Casey Wilkins

Cela fonctionne en supposant que toutes les lignes ont la même hauteur, même lorsque la première ligne d'en-tête a une hauteur différente (par exemple, les en-têtes longs sont encapsulés).

If List.RowCount = 0 Then
  List.Height = 0
ElseIf List.RowCount = 1 Then
  List.Height = List.ColumnHeadersHeight
Else
  List.Height = List.ColumnHeadersHeight + List.Rows(1).Height * (List.RowCount + 1)
End If
1
stenci

Définissez datagridviewautosizecolumn sur "All" Ensuite, dans le formulaire contenant la vue datagridview, si vous remplissez la vue de la grille de données dans le gestionnaire d'événements load ou dans un autre, le cas échéant, à chaque fois que les données sont chargées (doit être placé après). les données sont chargées) type: (VB) 

Me.Width = DataGridView1.Width + 50 ' Number of pixels wider than the datagridview you want the form to be.

datagridview1 est le nom de votre contrôle datagridview. Me fait référence au formulaire contenant le contrôle datagridview. 

Vous devrez peut-être agrandir la fenêtre ou l'ancrer en haut et à gauche pour assurer l'ajustement en fonction de la taille du jeu de données en cours de remplissage.

0
DavidG