DataGrid Spaltenbreite Optimieren

LordDeath

Erfahrenes Mitglied
Hi

Wie kann ich bei einem DataGrid die Spaltenbreite programmtechnisch optimieren ?

Ich möchte das gleiche Ereignis auf der WinForm wie wenn man den Doppelklick auf dem Spaltenrand macht !

Kann mir jemand helfen ?

DarkGreetinx LordDeath
 
Eigentlich gar nicht so schwer. Du kannst das ganze ja per Doppelklick auf die entsprechende Spalte machen. Welche Schritte musst du durchführen?

1.
Um die Spalte anzupassen, musst Du eigentlich wissen, wie lange der längste String in der Spalte ist. Lies dir die komplette Spalte mal in ein Array ein.

2.
Nun brauchst du ein Graphics-Objekt, welches du über die CreateGraphics-Methode deines DataGrids bekommst:

Code:
System.Drawing.Graphics g;
g = dataGrid.CreateGraphics();

3.
Du brauchst weiters auch noch ein Font-Objekt - und zwar von dem Font (inkl. Größenangaben etc.) in dem die Feldinhalte dargestellt werden.

Hierzu kannst Du die Klasse System.Drawing.Font verwenden. Der übergibst du das Font-Objekt des dataGrids für die Column.

4.
Nun hast Du eigentlich alle notwendigen Informationen, um die Breite des längsten Strings zu ermitteln.

Hierzu kannst du die MeasureString-Methode des oben erzeugten Graphics-Objectes benutzen. Dem übergibst du den Inhalt jeder einzelnen Zeile in deiner Spalte und das Font-Objekt, das Du oben erzeugt hast.

Code:
System.Drawing.SizeF stringsize;
stringsize = g.MeasureString(test, font);

Rückgabewert ist die Breite des enthaltenen Strings in PIxel. (Achtung, Size-Objekt, kannst du mit stringsize.Width und stringsize.Height drauf zugreifen). Hier ermittelst Du den längsten Eintrag und auf diese Breite + 2 oder 3 Pixel setzt Du dann die Spalte.
 
Hi!

Also komplizierter gehts glaub ich net mehr... ;)

@LordDeath:
In adneren Posts von Dir wurde dir doch so oft vom DataGridTableStyle erzählt, oder?! Über diesen Style kann man auch die Spalten ausblenden, die Breite bestimmen, den HeaderText (Spaltenüberschrift) unabhängig vom Spaltennamen in der Datenbank festlegen und soooo vieles mehr....

Hast Du Dir das mal angeschaut?
Schau doch mal meinen Code hier an...

MfG
..::SD::..
 
Er kann zwar über den Style die Breite festlegen, aber er kann nicht zur Laufzeit per Doppelklick die Spalte an die Breite des breitestens Strings anpassen lassen -> siehe wie Excel das macht und ich denke das will er.

Da wird er wohl zu meiner Lösung greifen müssen ...

Aber möglicherweise gibt es ja auch eine andere Lösung - mir ist sie nicht bekannt und ich hätte auch nirgends was gefunden dazu ...
 
Wie ich eben auch schon in einem anderen Post erwähnt habe, bei mir geht das im DataGrid ohne das ich etwas zutun muß! Benutzt er vielleicht gar nicht das DataGrid, oder ist die Eigenschaft ReadOnly = True? Ich kann echt nicht nachvollziehen warum das bei ihm nicht funktioniert...

MfG
..::SD::..
 
Ok, Du hast recht ... funktioniert :)

Aber meine Lösung könnt er auch nehmen wenn er Bock hat, die ist auch nix langsamer ...
 

Neue Beiträge

Zurück