2010-01-23 12 views
13

alt text http://www.freeimagehosting.net/uploads/260c1f6706.jpgden leeren grauen Raumes in Datagrid in C# Entfernen

, wie ich den leeren Raum entferne das heißt ich will das Datagrid selbst automatisch die Größe in Abhängigkeit von der Nr. von Reihen. Ich weiß für Spalten, die wir tun können, indem Sie den Füllwert in AutoSizeColumnMode verwenden, aber für AutoSizeRowsMode gibt es keinen Füllwert.

+1

+1 für retarded Highlight :) – TheBlastOne

+0

Das ist "kognitiv deaktiviert" Highlight. –

Antwort

9

Ein bisschen wie ein Hack, aber Sie können versuchen, diese:

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

Btw hat diese reported as a bug gewesen.

+0

Das funktioniert, aber dann hast du noch die Grenze. Irgendeine Idee, wie man das entfernt? –

11

Es kann getan werden, müssten Sie die ClientSize anpassen, wenn eine Zeile hinzugefügt oder entfernt wird. Der Hintergrund wird jedoch nicht vollständig ausgeblendet, sobald die vertikale Bildlaufleiste angezeigt wird und die Rasterhöhe nicht durch die Zeilenhöhe geteilt werden kann. Fügen Sie Ihrem Projekt eine neue Klasse hinzu und fügen Sie den unten gezeigten Code ein. Kompilieren. Legen Sie das neue Steuerelement oben in der Toolbox auf Ihrem Formular ab.

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 für Ihre Mühe, aber ich habe diesen Raum mit der oben vorgeschlagenen Methode los. –

+0

Ich habe ein Problem in meinen Tests gefunden, siehe: http://prnt.sc/b3rf7g kann ich auch die kleine graue Zeile entfernen? abhängig von den Daten hat die linkshändige Ecke einen großen Grabenbereich: http://prnt.sc/b3rft4 Wie kann ich das beheben? – Jack

3

Legen Sie die MaxHeight-Eigenschaft des Datagrids fest. z. B. MaxHeight="150"

In meinem Fall habe ich den Platz entfernt, was Sie im obigen Raster mit roten Boarder gezeigt haben.

Verwandte Themen