2010-01-23 4 views
13

alt text http://www.freeimagehosting.net/uploads/260c1f6706.jpgsupprimer l'espace gris vide DataGrid en C#

Comment puis-je supprimer l'espace vide que je veux dire le DataGrid pour redimensionner automatiquement lui-même en fonction de la non. des rangées. Je sais que pour les colonnes, nous pouvons le faire en utilisant la valeur de remplissage dans AutoSizeColumnMode, mais il n'y a pas de valeur de remplissage pour AutoSizeRowsMode.

+1

+1 pour le surbrillance retardée :) – TheBlastOne

+0

C'est le point culminant "cognitivement désactivé". –

Répondre

9

Un peu un hack, mais vous pouvez essayer ceci:

dataGridView1.BackgroundColor = System.Drawing.SystemColors.Control; 

BTW cela a été reported as a bug.

+0

Cela fonctionne, mais vous avez encore la bordure. Une idée de comment supprimer cela? –

11

Cela peut être fait, vous devrez ajuster le ClientSize lorsqu'une ligne est ajoutée ou supprimée. Cependant, il ne masque pas complètement l'arrière-plan une fois que la barre de défilement verticale apparaît et que la hauteur de la grille n'est pas divisible par la hauteur de la ligne. Ajoutez une nouvelle classe à votre projet et collez le code ci-dessous. Compiler. Déposez le nouveau contrôle du haut de la boîte à outils sur votre formulaire.

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class AutoSizeGrid : DataGridView { 
    private int gridHeight; 
    private bool resizing; 
    protected override void OnClientSizeChanged(EventArgs e) { 
    if (!resizing) gridHeight = this.ClientSize.Height; 
    base.OnClientSizeChanged(e); 
    } 
    protected override void OnRowsAdded(DataGridViewRowsAddedEventArgs e) { 
    setGridHeight(); 
    base.OnRowsAdded(e); 
    } 
    protected override void OnRowsRemoved(DataGridViewRowsRemovedEventArgs e) { 
    setGridHeight(); 
    base.OnRowsRemoved(e); 
    } 
    protected override void OnHandleCreated(EventArgs e) { 
    this.BeginInvoke(new MethodInvoker(setGridHeight)); 
    base.OnHandleCreated(e); 
    } 
    private void setGridHeight() { 
    if (this.DesignMode || this.RowCount > 99) return; 
    int height = this.ColumnHeadersHeight + 2; 
    if (this.HorizontalScrollBar.Visible) height += SystemInformation.HorizontalScrollBarHeight; 
    for (int row = 0; row < this.RowCount; ++row) { 
     height = Math.Min(gridHeight, height + this.Rows[row].Height); 
     if (height >= gridHeight) break; 
    } 
    resizing = true; 
    this.ClientSize = new Size(this.ClientSize.Width, height); 
    resizing = false; 
    if (height < gridHeight && this.RowCount > 0) this.FirstDisplayedScrollingRowIndex = 0; 
    } 
} 
+0

thx pour votre effort mais je me suis débarrassé de cet espace en utilisant la méthode suggérée ci-dessus. –

+0

J'ai trouvé un problème dans mes tests, regardez: http://prnt.sc/b3rf7g puis-je enlever la petite rangée grise aussi? en fonction des données, le coin gauche a une grande zone de graw: http://prnt.sc/b3rft4 Comment puis-je résoudre ce problème? – Jack

3

Définissez la propriété MaxHeight de la grille de données. Dans mon cas, j'ai supprimé l'espace que vous avez montré dans la grille ci-dessus avec une bordure rouge.