[C#] AutoSize columns in een ListView

Pagina: 1
Acties:
  • 140 views sinds 30-01-2008
  • Reageer

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
Ik heb blijkbaar wat met die ListView control.

Ik heb een listview, in report mode, met een aantal kolommen. Ik wil dat die columns 'autosize' zijn; dus, de breedte van de column moet aangepast worden aan het langste item in die kolom.

Volgens MSDN moet je dan een ColumnWidth van -1 geven aan die column. Zogezegd, zogedaan.
Echter, als ik m'n columns at design time instel, en ze een width van -1 geef, dan wordt die width al direct aangepast aan de breedte van de kolom-titel.
Als ik dan m'n appje run, dan zie ik dat die autosize niet blijkt te werken. De kolommen hebben de breedte van de headers, maar worden niet aangepast aan het langste item in die column.

Dan maar eens proberen om de columns 'at runtime' toe te voegen. Dit doe ik met deze code (recht uit MSDN):
code:
1
2
3
4
5
6
public MyForm()
{
     ...
     MyListView.Columns.Clear();
     MyListView.Columns.Add ("Omschrijving", -1, HorizontalAlignment.Left);
}


Echter, wat blijkt nu als ik m'n programma run: Er zijn helemaal geen kolommen zichtbaar in m'n applicatie.

Is die documentatie in de MSDN niet meer up to date? Doe ik iets verkeerd?
Is er iemand in geslaagd om die autosize v/e listviewcolumn wel werkend te krijgen?
}

https://fgheysels.github.io/


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Je moet je view ff op details zetten in plaats van op large icons. da's de enige waarop het werkt in C#... Dan krijg je namelijk kolommen.

Copyright © 2004 Sanderke

[ Voor 15% gewijzigd door OZ-Gump op 14-01-2004 22:52 ]

My personal website


Verwijderd

Probeer eens :
code:
1
lstModules.Columns[0].Width = -2;

Telkens nadat je iets toegevoegd hebt, anders laat ie het staan op de oude breedte.
In fact, the ListView class does provide a ColumnHeader.Width property. The MSDN documentation describes two special values related to auto-sizing the column, as follows: "To adjust the width of the longest item in the column, set the Width property to -1. To auto size to the width of the column heading, set the Width property to -2".
codeproject

om één of andere reden is het omgekeerd :)

[ Voor 5% gewijzigd door Verwijderd op 15-01-2004 01:00 ]


  • Sanderke
  • Registratie: November 2001
  • Laatst online: 18-05 14:19
Telkens nadat je iets toegevoegd hebt, anders laat ie het staan op de oude breedte.
Dat klopt. Als je vantevoren je breedte op autosize zet werkt het niet!

Meestal doe ik dit na het vullen van de listview:

code:
1
2
3
4
foreach (ColumnHeader ch in listviewnaam.Columns)
{
     ch.Width = -2;
}

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Beetje OT, maar ik zie dat je al vaker 'last' hebt gehad met de MS controls. Indien het budget ervoor is zou ik echt eens kijken naar een set met 3rd party GUI controls. Wij gebruiken zelf Infragistics waar we heel tevreden over zijn. Je kunt altijd een keer een demo downloaden.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
OZ-Gump schreef op 14 januari 2004 @ 22:51:
Je moet je view ff op details zetten in plaats van op large icons. da's de enige waarop het werkt in C#... Dan krijg je namelijk kolommen.

Copyright © 2004 Sanderke
Dat weet ik wel, en hij staat ook op 'Details' hoor. (Staat ook in m'n topicstart). ;)

Als ik de columnwidth aanpas na het toevoegen van een listitem, werkt het idd.
Da's wel een beetje kut vind ik.

[ Voor 14% gewijzigd door whoami op 15-01-2004 08:35 ]

https://fgheysels.github.io/


Verwijderd

Ik heb een functie geschreven waarbij de column width ook op -2 gezet, alleen de eerste kolom blijft steeds iets te klein. Ik zie dan daar steeds die irritante ... en moet zelf de kolom grote maken. Heeft iemand dit ook? Heeft iemand er een oplossing voor?

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
whoami schreef op donderdag 15 januari 2004 @ 08:28:
Als ik de columnwidth aanpas na het toevoegen van een listitem, werkt het idd.
Da's wel een beetje kut vind ik.
Er is nog wel meer 'kut' aan de standaard list control. Maar er is helaas niet simpel iets aan te doen.

Heeft C# trouwens geen constanten als LVSCW_AUTOSIZE_USEHEADER?

[ Voor 12% gewijzigd door Olaf van der Spek op 24-12-2004 12:22 ]


Verwijderd

Ik kom wel iets soortgelijks tegen, maar dat lijkt min of meer hetzelfde als de width van de columns op -2 te zetten. Op zich werkt dat dus niet verkeerd, alleen de eerste kolom is niet breed genoeg. Is er iemand die mij nog een tip kan geven?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Dat resizen moet achteraf. Dus eerst alle data erin, dan de width op -2 zetten, dan resized de column naar de breedste value.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Dat heb ik ook gedaan, bij elke wijziging wordt er een functie aangeroepen die de listview opnieuw opmaakt en waarbij de width wordt ingesteld.
Pagina: 1