Entwickler-Ecke
WinForms - DataGridView AutoSizeColumnsMode Problem
Steven85 - Do 16.07.15 09:01
Titel: DataGridView AutoSizeColumnsMode Problem
Moin zusammen,
mich nervt ein wahrscheinlich wirklich simples Problem. Ich versuche es mal ebenfalls simpel zu erklären.
Ich habe ein DataGridView mit einer gefüllten DataSource und der Formatierung AllCells für den AutoSizeColumnsMode. Alles kein Problem, außer das mich stört das die letzte Spalte nicht immer automatisch die komplette breite füllt und somit eine Lücke bleibt.
Also mache ich:
Quelltext
1:
| dgv.Columns[Fields[Fields.Count - 1]].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; |
Hier habe ich aber das Problem das die letzte Spalte, wenn die Spalten die komplette breite füllen, nicht ganz angezeigt wird und auch die Scrollbar zu spät aktiv wird.
Ich hoffe ihr könnt mir helfen. Danke im Voraus.
Ralf Jansen - Do 16.07.15 09:28
| Zitat: |
Hier habe ich aber das Problem das die letzte Spalte, wenn die Spalten die komplette breite füllen, nicht ganz angezeigt wird und auch die Scrollbar zu spät aktiv wird.
|
Häh?
Ich habe es mal schnell ausprobiert und was ich sehe ist erwartungskonform und sehe auch kein Problem mit der Scrollbar. Was erwartest du hier genau?
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private void button1_Click(object sender, EventArgs e) { dataGridView1.DataSource = new DirectoryInfo(@"D:\").GetFiles(); dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; dataGridView1.Columns[dataGridView1.ColumnCount - 1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } |
Steven85 - Do 16.07.15 09:34
In der Screenshot siehst du das beim verkleinern des Fensters die letzte Spalte nicht korrekt dargestellt wird.
Und es ist egal wie viele Spalten das DGV hat.
Ralf Jansen - Do 16.07.15 09:54
Ok das passiert wenn man die letzte Spalte auf Fill setzt wenn die Spalte schon gar nicht mehr in den sichtbaren Bereich passt.
Aka die anderen Spalten sind zusammen 1000px breit das Grid ist aber nur 800px breit und nun möchtest du das die letzte Spalte den (nicht vorhanden) Rest an Platz einnimt.
Ich habe gar keine Vorstellung was in diesem Fall überhaupt passieren sollte. Fill macht (meine Meinung) eigentlich nur in den Fällen Sinn wo man keine horizontale Scrollbar braucht.
Vielleicht beschreibst du mal genau welches Verhalten du dir wünscht. Dann kann man sich überlegen ob man da irgendwie in die Nähe kommt.
Edit:
Möglicherweise reicht es dir schon wenn du die minimale Breite der Spalte setzt. Z.B.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void button1_Click(object sender, EventArgs e) { dataGridView1.DataSource = new DirectoryInfo(@"D:\").GetFiles(); dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; dataGridView1.Columns[dataGridView1.ColumnCount - 1].MinimumWidth = dataGridView1.Columns[dataGridView1.ColumnCount - 1].GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, true); dataGridView1.Columns[dataGridView1.ColumnCount - 1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } |
Steven85 - Do 16.07.15 11:51
Das löst mein Problem schon vollständig und sauber. Vielen Dank.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!