it-swarm.com.de

DataGridView - wie wird die Spaltenbreite eingestellt?

Ich habe eine WinForms-Anwendung mit DataGridView-Steuerelement. Mein Steuerelement verfügt über fünf Spalten (zB "Name", "Adresse", "Telefon" usw.).

Ich bin nicht zufrieden mit der Standardspaltenbreite. Ich möchte mehr Kontrolle über das Erscheinungsbild der Spalte haben. Was ich will kann einen der folgenden Schritte ausführen:

  • Legen Sie die Breite jeder Spalte in Prozent fest
  • Legen Sie die Breite jeder Spalte in Pixel fest
  • Verwenden Sie eine andere bewährte Methode (Breite an den Text anpassen usw.)

Bitte schlagen Sie vor - welche Eigenschaft soll verwendet werden und wie.

35
Captain Comic

Sie können dazu die DataGridViewColumn.Width-Eigenschaft verwenden:

DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 60;

http://msdn.Microsoft.com/de-de/library/system.windows.forms.datagridviewcolumn.width.aspx

49
Bhaskar

Folgendes kann auch ausprobiert werden:

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells

oder verwenden Sie die anderen Einstellungsoptionen im DataGridViewAutoSizeColumnsMode-Enum

24
Mark

Die meisten der oben genannten Lösungen gehen davon aus, dass der übergeordnete DateGridView.AutoSizeMode nicht gleich Fill ist. Wenn Sie den .AutoSizeMode für das Raster auf Fill setzen, müssen Sie den AutoSizeMode für jede column auf None setzen, wenn Sie eine bestimmte Spaltenbreite festlegen möchten (und die anderen Spalten füllen lassen). Ich habe eine seltsame MS-Ausnahme bezüglich eines Nullobjekts gefunden, wenn Sie eine Spaltenbreite ändern und der .AutoSizeMode nicht zuerst None ist.

Das funktioniert

chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;

Dies führt zu einer Null-Ausnahme in Bezug auf ein internes Objekt bezüglich der Einstellung der Randstärke.

chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
 // chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;
19
Mark Lakata

Ich weiß, das ist eine alte Frage, aber niemand hat den ersten Teil beantwortet, , um die Breite in Prozent einzustellen. Das kann leicht mit FillWeight (MSDN) durchgeführt werden. Falls jemand anderes auf diese Antwort stößt.

Sie können DataGridAutoSizeColumnMode so einstellen, dass der Designer gefüllt wird. Standardmäßig gibt das jede Spalte FillWeight von 100. Dann können Sie im Code hinter, beim FormLoad-Ereignis oder nach dem Binden von Daten an das Raster einfach:

gridName.Columns[0].FillWeight = 200;
gridName.Columns[1].FillWeight = 50;

Und so weiter, für jedes proportionale Gewicht, das Sie möchten. Wenn Sie jede einzelne Spalte mit Zahlen, die bis zu 100 summieren, für eine wörtliche Prozentbreite erstellen möchten, können Sie dies auch tun.

Es gibt ein schönes vollständiges DataGrid, bei dem die Kopfzeilen den gesamten Speicherplatz verwenden, auch wenn der Benutzer die Fenstergröße ändert. Sieht gut aus auf Breitbild, 4: 3, was auch immer.

11
Jeremy L

In Bezug auf Ihre letzte Kugel

breite an den Text anpassen

Sie können mit dem .AutoSizeMode Ihrer DataGridViewColumn experimentieren und einen der folgenden Werte festlegen:

None
AllCells
AllCellsExceptHeader
DisplayedCells
DisplayedCellsExceptHeader
ColumnHeader
Fill

Mehr Infos auf der MSDN Seite

7
hawbsl

ich schlage vor, allen Spalten des Gitters eine Breite wie folgt zu geben:

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.HeaderText = "phone"            
col.Width = 120;
col.DataPropertyName = (if you use a datasource)
thegrid.Columns.Add(col);    

und für die Hauptspalte (oder die längste) Spalte (sagen wir Adresse):

col = new DataGridViewTextBoxColumn();
col.HeaderText = "address";
col.Width = 120;

schwieriger Teil

col.MinimumWidth = 120;
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

schwieriger Teil

col.DataPropertyName = (same as above)
thegrid.Columns.Add(col);

Auf diese Weise nimmt die Hauptspalte, in diesem Fall die Adressspalte, den gesamten verfügbaren Speicherplatz ein, wenn Sie das Formular strecken (und das Raster in seinem Container "Dock gefüllt" ist), aber es geht nie unter Col.MinimumWidth, also Es ist das einzige, dessen Größe geändert wird.

Ich verwende es, wenn ich ein Raster habe und seine letzte Spalte für die Anzeige eines Bildes (wie Icon-Detail oder Icon-Löschen) verwendet werde. Es hat nicht die Kopfzeile und es muss immer das kleinste sein.

3
kindaska
public static void ArrangeGrid(DataGridView Grid)
{ 
    int twidth=0;
    if (Grid.Rows.Count > 0)
    {
        twidth = (Grid.Width * Grid.Columns.Count) / 100;
        for (int i = 0; i < Grid.Columns.Count; i++)
            {
            Grid.Columns[i].Width = twidth;
            }

    }
}
2
santosh

Benutzen:

yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
2
Mahesh
DataGridView1.Columns.Item("Adress").Width = 60
    DataGridView1.Columns.Item("Phone").Width = 30
    DataGridView1.Columns.Item("Name").Width = 40
    DataGridView1.Columns.Item("Etc.").Width = 30
1
Schpenn

Wenn Sie es nicht programmgesteuert machen möchten, können Sie die Eigenschaft Column width ändern, die sich in der Eigenschaft Columns befindet. Wenn Sie die Eigenschaft der Spalte bearbeiten öffnen, können Sie auswählen, welche Spalte Sie bearbeiten möchten, und zum Layout-Abschnitt des Fensters scrollen gebundene Spalteneigenschaften und ändern Sie die Breite. 

1
Nate S.

Sie können die Standardbreite und -höhe für alle Spalten und Zeilen wie folgt nur mit einer Schleife festlegen.

    // DataGridView Name= dgvMachineStatus

   foreach (DataGridViewColumn column in dgvMachineStatus.Columns)
        {
            column.Width = 155;
        }

   foreach (DataGridViewRow row in dgvMachineStatus.Rows)
        {
            row.Height = 45;
        }
0
Ayaat Shifa