2010-01-29 13 views
9

Ich frage mich, ob es möglich ist, den nicht verwendeten Speicherplatz (der graue Bereich) des DataGridView-Steuerelements in C# zu entfernen. Ich muss das DataGridView nur die weiße Tabelle anzeigen lassen.DatagridView: Unbenutzten Speicherplatz entfernen?

alt text http://www.timvw.be/wp-content/images/datagridview-to-excel-1.gif

Irgendwelche Vorschläge?

+0

Gute Frage ... aber keine befriedigende Antworten !!!! :( –

+0

Werfen Sie einen Blick auf meine Antwort hier. – Tina

+0

Der Bildlink ist kaputt. –

Antwort

2

Ich glaube, Sie wollen:

myDataGrid.AutoSizeColumnsMode = Fill 

EDIT: Dies ist nur die Spalten ändert die Größe. Ich bin mir nicht sicher, wie Sie den grauen Bereich der Reihe loswerden würden, abgesehen von der Größe des Rasters.

+0

Dies wird nicht den ganzen grauen Raum, nur das Leerzeichen auf der rechten Seite der Spalten loswerden.Sie müssen einen Handler für das Resize-Ereignis schreiben, um die sichtbaren Zeilen so zu füllen, dass sie das Raster ausfüllen, wenn Sie dieses Verhalten möchten. –

+0

Mit Ihrer Bearbeitung gehen Sie davon aus, dass ein Füllwert für AutoSizeRowsMode falsch ist. –

+0

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewautosizerowsmode.aspx –

5

Stellen Sie die RowsHeaderVisible Eigenschaft auf false, können Sie entweder das tut, von dem Designer in der Kategorie Appearence oder aus dem Code:

dataGridView1.RowsHeaderVisible = false; 

Um die Anzeige Zeile auf der linken Seite zu entfernen, wie für den Rest des grauen Raumes, können Sie versuchen, die oben genannten AutoSizeColumnsMode auf füllen, aber Sie haben immer noch den unteren Teil aus dem Fehlen von Reihen ausgegraut.

Anstatt die Größe der Zellen so zu bemessen, dass sie das Gitter ausfüllen, können Sie die Größe des Rasters ändern, um sich an die Zellen anzupassen. Ob dies akzeptabel ist oder nicht, hängt von Ihrer Absicht ab.

Ich meine, es ist möglich, dass, wenn es nur die Farbe ist, die Sie stört, die Einstellung der Backcolor auf Weiß würde den Trick tun.

+1

Also ... es gibt keine perfekte Lösung ?? –

+0

Danke, du hast meinen Tag gerettet .. !! – User5590

1
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 
+0

Fehler: Der Typ 'System.Windows.Forms.DataGridViewAutoSizeColumnMode' kann nicht implizit in 'System.Windows.Forms.DataGridViewAutoSizeColumnsMode' konvertiert werden. Eine explizite Konvertierung existiert (fehlt Ihnen eine Besetzung?) –

+0

Sie können ein 's' nach Spalte in Ihrem System.Windows.Forms.DataGridViewAutoSizeColumnMode hinzufügen und das Problem wird gelöst werden :) – Tina

4

Ich habe keinen einfachen Weg gefunden, die „nicht verwendet“ oder grau (Background) Raum zu entfernen. Eine effektive Lösung für mich war jedoch, die Grenzen des DataGridView zu verbergen und seine Hintergrundfarbe in den Hintergrund des umgebenden Steuerelements zu ändern. Im Wesentlichen ist die Wahrnehmung, dass es keinen ungenutzten Raum mehr gibt.

Hier ist ein Ausschnitt in Pseudo-Code:

TableGridView = DataGridView() 
TableGridView.Width = 0 
TableGridView.Height = 0 
TableGridView.AutoSize = true 
TableGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 
TableGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells 
TableGridView.BackgroundColor = SystemColors.ControlLightLight 
TableGridView.BorderStyle = BorderStyle.None 

ich irgendwo gelesen, dass die Auto-Size-Einstellung nicht anwendbar ist, aber es hat die Dinge für mich ändern. Dieses Beispiel weist darauf hin, dass das Umgebungssteuerelement eine Hintergrundfarbe von SystemColors.ControlLightLight aufweist. Dies kann jedoch nach Bedarf geändert werden.

Bitte stimmen Sie ab, wenn es Ihnen geholfen hat.

+0

Upvoted, es half ... das war die am nächsten komme ich bis jetzt – Jack

5

Manchmal (vor allem mit WinForms) der beste Weg zu hacken ist:

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

Ich habe es aus diesem Beitrag: removing the empty gray space in datagrid in c#

+0

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

0

Nun, mühte ich für diese, bevor Sie eine Antwort zu finden, aber in das Ende, wenn Sie ein leeres DataGridView nachahmen möchten, dann ist die lange Antwort, "White" Rectangle Objekte zu erstellen und Grafiken zu verwenden, um das gesamte Raster für eine überschriebene OnPaint-Methode zu füllen.