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:
Bitte schlagen Sie vor - welche Eigenschaft soll verwendet werden und wie.
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
Folgendes kann auch ausprobiert werden:
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
oder verwenden Sie die anderen Einstellungsoptionen im DataGridViewAutoSizeColumnsMode-Enum
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;
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.
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
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.
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;
}
}
}
Benutzen:
yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
DataGridView1.Columns.Item("Adress").Width = 60
DataGridView1.Columns.Item("Phone").Width = 30
DataGridView1.Columns.Item("Name").Width = 40
DataGridView1.Columns.Item("Etc.").Width = 30
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.
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;
}