[W7/XP/C#]Items groeperen in ListView

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Ik ben aan het knutselen in C# en loop tegen een probleempje aan.. Ik ben een programmatje aan het maken waarin ik bij kan houden welke films er hier allemaal in huis zijn.

Hiervoor heb ik een listview waarin ik films wil groepen op genre. Zolang ik een groep heb gaat het goed:

Afbeeldingslocatie: http://pics.dieben-online.net/CPruts/goed.png

Zodra ik met meerdere groepen ga werken gaat het fout:

Afbeeldingslocatie: http://pics.dieben-online.net/CPruts/dikke_fail.png Afbeeldingslocatie: http://pics.dieben-online.net/CPruts/dikke_fail2.png
(die rechter krijg ik als ik met de muis boven 'Back to the Future' ga hangen)

Relevant stukje code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
foreach (Categorie Genre in Result)
{
    ListViewGroup GenreGroep = new ListViewGroup(Genre.Naam, HorizontalAlignment.Left);
    lstFilms.Groups.Add(GenreGroep);

    ArrayList FilmResultaat = new ArrayList();
    FilmResultaat = DB.getFilms(Genre.ID);

    if (FilmResultaat != null) //Voor als een categorie (genre) geen films bevat
    {
        foreach (Film Filmpje in FilmResultaat)
        {
            lstFilms.Items.Add(Filmpje.Titel).Group = GenreGroep;
        }
    }
}


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Categorie
{
    public string Naam;
    public int ID;
}

public class Film
{
    public int FilmID;
    public string Titel;
    public string Genre;
    public bool BlueRay;
    public bool DVD;
    public bool VCD;
    public int Jaar;
    public int AfbeeldingID;
}


Wat doe ik hier fout? Ben al een tijdje aan het zoeken en prutsen maar hij blijft dit resultaat geven.. Eerst voegde ik eerst alle genres toe en daarna pas alle films. Zoals je in de code kan zien voegt hij nu een genre toe en daarna direct alle bijbehorende films. Maar ook dat geeft hetzelfde resultaat :P

Had ook al een en ander gevonden over bugjes in het .NET framework maar dat was uit 2006..neem aan dat dat inmiddels wel opgelost is..

[ Voor 12% gewijzigd door Glashelder op 27-04-2009 12:49 ]

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:51

Haan

dotnetter

Kan je niet beter een ListViewGroup maken, daar films aan toe voegen en dan de group aan de ListView toevoegen?
En volgens mij kan dit makkelijker als je .Net 3.5 en Linq gebruikt, maar daar moet ik me zelf ook nog altijd een keer in verdiepen.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Als ik dat doe dan krijg ik helemaal niets te zien in de ListView. De films voeg ik dan toe aan de groep met items.Add en die groep voeg ik dan toe aan de listview..

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:10
Heb je nog andere code die iets doet met de listview of instellingen die je op de listview ingesteld hebt? Ik heb dit bij mij net even uitgeprobeerd en hier werkt het gewoon.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Ik vermoed dat er iets mis gaat met het afhandelen van de redraw events oid. Het ziet er heel erg naar uit dat het bepalen van de afmeting van de componenten gedaan wordt op het moment dat ze nog niet (helemaal) gevuld is.

Ben je soms dingen aan het uitvoeren in je UI thread die eigenlijk in een andere thread zouden moeten?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:51

Haan

dotnetter

Heb het hier ook net zitten testen, het werkt met jouw code wel.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
@Janoz:
Nee ik doe verder helemaal niets boeiends volgens mij.. Welke versie van Visual Studio gebruik je? Ik gebruik 2008 op Windows7.

Ik heb toevallig net toch een nieuwe HDD gehaald, dus ik zal Vista even proberen :)

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Ik gebruik geen Visual studio. Ik doe niet eens aan C# :D.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Glashelder schreef op maandag 27 april 2009 @ 20:07:
Nee ik doe ... niets boeiends volgens mij.. ... Ik gebruik ... Windows7.
Het is niet gezegd dat het hier aan ligt maar wat als je eens test op een OS dat UIT de beta fase is? :X En dat soort zaken lijken me ook wel relevant om voortaan in je topicstart op te nemen en sowieso iets om eerst even te testen op een gereleased OS voordat je een topic überhaupt opent ;)

[ Voor 24% gewijzigd door RobIII op 27-04-2009 20:58 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Windows XP staat met een reden in de titel ;)

@RobIII hieronder:
je hebt gelijk, maar ik had het OS erin gezet omdat dit bovenin het scherm stond toen ik een nieuw topic ging openen :P

Topictitel: Zet taal en/of platform tussen [blokhaken] en omschrijf je probleem kort en krachtig.

Nou staat er inderdaad en/of...maargoed ik heb het er nu wel bijgezet.
Zal het de volgende keer wel laten :P

[ Voor 80% gewijzigd door Glashelder op 27-04-2009 21:08 ]

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Glashelder schreef op maandag 27 april 2009 @ 20:57:
Windows XP staat met een reden in de titel ;)
Dat was mij nog niet opgevallen :X Sowieso zetten we doorgaans alleen de taal in de tag ;) Anders krijgen we straks: "[XP/W7/C#/.Net20/Winforms/VS2008SP1/EN] Items groeperen in ListView" :P
Je tag zou nu zelfs kunnen suggereren dat 't onder Vista/Win2K wél goed werkt.

[ Voor 37% gewijzigd door RobIII op 27-04-2009 21:02 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 16:02
Je code doet het hier (Windows Vista en Windows 7 RC1)

Wat wel opvalt is dat Windows 7 het iets anders uitlijnt dan Windows Vista doet (zie screen voor meer details, de linker is de applicatie in een Windows 7 VM, de rechter is de applicatie op Vista (host)).

Screen

Ik denk dat het probleem in een ander gedeelte van de code zit, dus wat hierboven genoemd word dat je in de GUI thread dingen zit te doen die daar niet in horen.

Kun je misschien een sample bouwen van je applicatie (waar je hard coded) de boxen vult zonder dat er een database achter hangt, dan kun je dat posten en kunnen wij op onze systemen testen.

p.s.

Je kan beter een enum maken met mediadragers ipv bools voor DVD/VCD. Als binnekort Blu Ray wat ingeburgerd is (of de opvolger daar weer van) kom je je hele applicatie aan het omschrijven omdat je overal true's en falses zit rond te slingeren ;).

Je kan trouwens bij Genre beter het GenreID opgeven ipv de string zelf, (zoals je het gedaan heb bij AfbeeldingsID) op die manier voorkom je dat (als je ergens ooit een spellingsfout maakt in een genrenaam) je deze niet bij elke film afzonderlijk moet controleren en eventueel aanpassen.

Tenslotte is het misschien handig om een lege ArrayList terug te geven bij je DB.getFilms() methode, op die manier voorkom je de ==null check die erna komt (en dus een exception als je het ergens vergeet). Mocht de ArrayList leeg zijn dan zal de foreach gewoon niets doen (ipv zoals nu een exception throwen).

Mess with the best, die like the rest

Pagina: 1