Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Sorteren van listbox (C#)

Pagina: 1
Acties:
  • 1.430 views

Verwijderd

Topicstarter
Hallo allemaal

ik heb twee lisboxen: listbox3 en listbox4
In listbox3 zou er maar een member van listbox1 gezien moeten worden. Maar deze moet gesorteerd worden door een andere member die ook in listbox1 staat.
In listbox3 zou ik dan de geselecteerde item zijn eigenschappen moeten laten zien.

voorbeeld:

Listbox1:
PNaam: eerst - PNr 2 - PAankomst 4 - Pstatus New
PNaam: tweede- PNr 9 - PAankomst 8 - Pstatus Wait
PNaam: derde - PNr 2 - PAankomst 5- Pstatus New

In ListBox3 moet er dit staan(gesorteerd door PAankomst)
eerst
derde
tweede

In listbox4 zou er dit moeten staan (als gebruiker "tweede" heeft geselecteerd)

PNr 9 - PAankomst 8 - Pstatus Wait

Ik moet dus een member van een lijst vergelijken met de andere members in die zelfde lijst. Ik dacht aan IComparable maar om een of andere reden lukt dit niet...

Enige suggesties?


Geef eerst globaal aan wat het probleem is:

Het probleem is dat ik een lijst moet sorteren volgens een bepaalde object in die lijst. (Proces: PNaam, PNr, PAankomst, PStatus). Het zou moet gesorteerd worden via PAankomst.
Niet enkel gesorteerd maar er moet tevens een andere member zichtbaar zijn, de PNaam.

Geef vervolgens aan waar je denkt dat het aan ligt.
Ik moet volgens mij een IComperable gebruiken. Ik heb geprobeerd met een IComparer. Maar dit is enkel voor als men twee objecten vergelijkt. Maar ik zou een lijst moeten vergelijken. Maar ik zie niet meteen hoe.

[ Voor 25% gewijzigd door Verwijderd op 18-03-2008 22:03 . Reden: Meer informatie volgens de quickstart ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:42
Hoi, welkom op Got.

Wat bedoel je met 'een member' in een listbox ?
Een item in een listbox ? Of een member van een class ? En van welke class ?

Wat heb je zelf al geprobeerd ivm die IComparable ? Wat lukt er precies niet ? Krijg je fouten, krijg je verkeerde output ?
Wat heb je gedaan met die IComparable ? Waar heb je die geimplementeerd ? Welke class implementeert die interface ?

Hoe voeg je items toe aan die listbox ? Via databinding, of gewoon door ieder item mbhv Add aan de Items collectie toe te voegen ?
Ik vind niet direct een manier om een listbox te sorteren , maar je kan natuurlijk ook de items sorteren voor je ze toevoegt aan die listbox

Heb je al eens naar IComparer gekeken ?

Lees ook eens onze PRG Quickstart, en vul je topicstart aan met de nodige info adhv die Quickstart, wanthier ontbreekt niet alleen heel wat essentiele informatie, het lijkt er hier ook op dat je GoT wilt gebruiken als quickfix middel om je probleem op te lossen, en zo werkt het hier niet.

[ Voor 31% gewijzigd door whoami op 18-03-2008 21:04 ]

https://fgheysels.github.io/


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Wat lukt niet? Post eens die code?

Als ge u .Items opvult met een List van elementen die IComparable implementen kunt ge die list toch sorten?

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Topicstarter
Member = PAankomst (is een private datamember van een klasse)

Ik denk dat ik het best gewoon even mijn solution in bijlage steek. Het is redelijk wat lastig om het allemaal uit te leggen. Maar indien er meer informatie nodig is, als de solution beschikbaar is, zal ik die met veel plezier geven. Ik zal ondertussen ook die cart invullen. Zodat jullie me beter zouden kunnen helpen.

*snip code*

PS: is er geen mogelijkheid om een bijlage bij te steken?

[ Voor 191% gewijzigd door een moderator op 18-03-2008 23:48 ]


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Kijk, zo'n shitload aan code begin ik nog niet eens aan :+

Anyway: IsInteger -> Int32.TryParse();

Waarom het wiel opnieuw uitvinden?

Anyway:

Een listbox heeft Items. Die add ge. Ge kunt objecten adden, en om die weer te geven wordt er de ToString() methode op toegepast.

Dus ge maakt een List, van objecten die in u listbox moeten komen.

Die objecten komen van 1 klasse (duhh) en die klasse heeft de volgende methoden:

ToString, en CompareTo (of was het Compare?), en die klasse implementeert IComparable.

Als ge da correct hebt gedaan, en die CompareTo correct hebt ge implementeerd kunt ge u klasse sorten.

En dan kunt ge weer u listbox opvullen ;)

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Topicstarter
Oke dankje, het sorteren lukt prima :) maar nu is het volgende, ik had graag enkel de PNaam willen zien in die listbox. Nu komt er alles door (Proces: PNaam,PNr, PAankomst, PStatus). Nu zal je natuurlijk zeggen dat ik de ToString moet veranderen, maar deze ToString heb ik nodig voor de eerste listbox op te vullen. Daar zijn alle gegevens nodig. Maar hier dus niet. Maar volgens mij kan je toch geen twee ToString's in één klasse zetten?

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Maakt ge nieuwe objecten aan of hergebruikt ge ze?

Moest ge nieuwe aanmaken zoud ge met een bool oid een if in u ToString kunnen maken, en dan op basis van die bool de juiste waren returnen.

Going for adventure, lots of sun and a convertible! | GMT-8


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11:59

NMe

Quia Ego Sic Dico.

Annieken, ik heb je geposte code weggehaald. Niemand gaat ál die code doorlezen, en bovendien kan het nooit helemaal relevant zijn voor je probleem. Als je code wil posten, post dan alleen het relevante gedeelte en laat de rest achterwege. Dat is ook in je eigen voordeel, aangezien mensen veel eerder geneigd zullen zijn een kort stukje door te lezen dan een lang stuk. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Oké NME, dat was de reden dat ik vroeg of er een mogelijkheid was om iets in bijlage te steken.

@Nicky: Het zijn de objecten van de lijst Proces en de lijst Burst die ik hergebruik om dan in de listbox3 en listbox4 te laten zien.

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op woensdag 19 maart 2008 @ 06:57:
Oké NME, dat was de reden dat ik vroeg of er een mogelijkheid was om iets in bijlage te steken.

@Nicky: Het zijn de objecten van de lijst Proces en de lijst Burst die ik hergebruik om dan in de listbox3 en listbox4 te laten zien.
1) de nick is Snake :+

2) is er geen mogenlijkheid de objecten te klonen en daarbij een andere ToString te gebruiken?

Extend u Proces en u Burst met klassen? En override daar de ToString :)

Wel vroeg op e :+ Deadline ? ;)

[ Voor 3% gewijzigd door Snake op 19-03-2008 07:15 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Topicstarter
Sorry Snake, was een beetje in de war.

Het is natuurlijk wel mogelijk om de objecten te clonen, maar als ik dat dan doe, kan ik dan een override string doen? Want die heb ik immers al in mijn klasse.

Nee mijn proces extend mijn Burst nog niet. Omdat ik een gemeenschappelijke member moet hebben. Ik denk aan PNr, maar ik zie nog niet meteen hoe het in zijn werk treedt. De constructor van Burst moet dan die ene PNr hebben, maar hoe kan hij die vinden?

Nee, een ruzie met mijn vriend zorgt voor de ochtendelijke wakkerstand :)

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op woensdag 19 maart 2008 @ 07:28:
Sorry Snake, was een beetje in de war.

Het is natuurlijk wel mogelijk om de objecten te clonen, maar als ik dat dan doe, kan ik dan een override string doen? Want die heb ik immers al in mijn klasse.

Nee mijn proces extend mijn Burst nog niet. Omdat ik een gemeenschappelijke member moet hebben. Ik denk aan PNr, maar ik zie nog niet meteen hoe het in zijn werk treedt. De constructor van Burst moet dan die ene PNr hebben, maar hoe kan hij die vinden?

Nee, een ruzie met mijn vriend zorgt voor de ochtendelijke wakkerstand :)
Maar als ge nu es:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class BurstExtend : Burst
{
   public Burst Burst { get; set; }
   public BurstExtend (Burst burst, String text) : base(burst)
   {
       this.Burst = burst;
   }
   public override String ToString()
   {
      /* ... */
      return String.empty; //veranderen in u String
   }
}

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Topicstarter
Ik heb de code gecopieerd en de string wat veranderd, zoals ik hem zou willen.
Toch krijg ik een fout

Error 1 'eindwerk.BurstExtend.Burst.get' must declare a body because it is not marked abstract or extern \BurstExtend.cs 9 30

Het gaat vooral om
[C#]
public Burst Burst { get; set; }
[/C#]

Maar in mijn klasse Burst staat er precies geen get, set... (vreemd, dan moet dat toch niet kunnen gaan?)
Er staat wel een get, set van de lengte. En die moet ik toch hebben? Het is toch de bedoeling dat ik de lengte kan weergeven (+ soort)?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 16:29
Waarom?
Kijk een naar de DataSource, DisplayMember en Sorted properties van ListBox?

Roomba E5 te koop


Verwijderd

Topicstarter
DataSource : none
Displaymember : none
Sorted : false

Maar als ik op dat pijltje druk van dataSource, is dat toch om een Database mee te geven?
En bij sorted = false, is toch enkel om alfabetisch te rangschikken?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 16:29
Een List kan ook prima een datasource van een ListBox zijn, de DisplayMember zou je dan op de property van het object zetten die hij moet weergeven. Als je class vervolgens IComparable implementeerd, zou de ListBox netjes moeten sorteren zoals jij wil. Mocht dit niet zo zijn kan je altijd nog de List sorteren voordat je 'm als DataSource aan de ListBox hangt

Edit: sorry, ik zie net dat ik wat dingen door elkaar haal... Sorted werkt alleen als je ListBox geen DataSource heeft. De combinatie DisplayMember en Sorted werkt wel, alleen dan sorteert de ListBox op wat de DisplayMember toont (alfabetisch zoals je zei idd). Als je een alternatieve sorteervolgorde nodig hebt kan je het beste de List sorteren voor je de items aan de ListBox toevoegt.

[ Voor 35% gewijzigd door sig69 op 19-03-2008 09:05 ]

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:42
Als je op 'dat pijltje' drukt, kan je een DataSource aangeven, en dat kan vanalles zijn. Je kan je collectie als datasource gebruiken, en als je je collectie sorteert, dan zal je listbox de items gesorteert tonen zoals ze in de collectie staan.

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 16:29
Een andere interessante optie is misschien het BindingSource component (leesvoer :) )

Roomba E5 te koop


Verwijderd

Topicstarter
Maar ik moet gegevens sorteren die voor mij ongekend zijn (gebruiker voert ze in) hoe kan ik die dan invullen bij de datasource?

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:42
De gegevens die de gebruiker invoert, zijn toch gegevens die je blijkbaar in een bepaald object gaat opslaan ?
Dus ...
bv:
code:
1
2
Persoon p = new Persoon (... door gebruiker ingevoerde gegevens ... );
myPersonCollection.Add (p);

code:
1
Listbox1.DataSource = myPersonCollection;

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ja dat is waar maar moet ik die dan in de datasource via properties aangeven?(door op dat pijltje te drukken en het in te vullen?)

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op woensdag 19 maart 2008 @ 08:31:
Ik heb de code gecopieerd en de string wat veranderd, zoals ik hem zou willen.
Toch krijg ik een fout

Error 1 'eindwerk.BurstExtend.Burst.get' must declare a body because it is not marked abstract or extern \BurstExtend.cs 9 30

Het gaat vooral om
C#:
1
public Burst Burst { get; set; } 


Maar in mijn klasse Burst staat er precies geen get, set... (vreemd, dan moet dat toch niet kunnen gaan?)
Er staat wel een get, set van de lengte. En die moet ik toch hebben? Het is toch de bedoeling dat ik de lengte kan weergeven (+ soort)?
Dat zijn de getters en setters in C#3.0, blijkbaar gebruikt ge nog 2.0

Dat moet

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class BurstExtend : Burst
{
   private Burst burst
   public Burst Burst
   {
      get { return burst; }
      set { burst = value; }
   }

   public BurstExtend (Burst burst, String text) : base(burst)
   {
       this.Burst = burst;
   }
   public override String ToString()
   {
      /* ... */
      return String.empty; //veranderen in u String
   }
}

Going for adventure, lots of sun and a convertible! | GMT-8


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:42
Snake schreef op woensdag 19 maart 2008 @ 12:52:
[...]

Dat zijn de getters en setters in C#3.0, blijkbaar gebruikt ge nog 2.0
Dat heb je ook in .NET 2.0.
Die foutmelding die de TS krijgt, is gewoon logisch: je erft over van een abstract class, en die abstract class zegt dat je concrete class een get / set implementatie moet hebben van de burst property.
Dit is niet te verwarren met die automatic properties uit c# 3.0

https://fgheysels.github.io/


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

whoami schreef op woensdag 19 maart 2008 @ 13:36:
[...]
Dat heb je ook in .NET 2.0.
Die foutmelding die de TS krijgt, is gewoon logisch: je erft over van een abstract class, en die abstract class zegt dat je concrete class een get / set implementatie moet hebben van de burst property.
Dit is niet te verwarren met die automatic properties uit c# 3.0
Ik doelde op de automatic properties, en Burst van TS is toch niet abstract?

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Topicstarter
Hoe moet ik het dan oplossen?

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Topicstarter
Ja dankje Snake, het was omdat jullie het precies onderling niet akkoord waren.

Ik krijg nu volgende fouten;
Error 1 No overload for method 'Burst' takes '1' arguments
Error 2 The name 'PNaam' does not exist in the current context

Het laatste komt omdat ik dit ingevuld heb
C#:
1
2
3
4
5
6
7
       public override String ToString()
        {
            String uit;
            uit = PNaam;
            //return String.empty; //veranderen in u String
            return uit;
        } 


De PNaam komt uit de klasse Proces. Maar indien ik Proces.getPNaam(); indruk gaat dit niet. Hij vult niet automatisch aan, dus dan is het verkeerd, klopt toch é?

Verwijderd

Topicstarter
Ik denk dat het beste is om aan de lijst van Proces ook de lijst Burst toe tevoegen. Een burst is afhankelijk van de PNr. Maar hoe kan ik die toevoegen? Ik kan die toch niet gewoon toevoegen aan de constructor?

Met volgende regel probeerde ik de Burst lijst in de klasse van Proces te krijgen (om nadien die toe te voegen aan constructor, of gewoon aan de ToString();
C#:
1
private List<Burst> BurstLijst = Burst;


En deze is dan mijn ToString() methode (beide stukken code hier zichtbaar zitten in de klasse Proces)

C#:
1
2
3
4
5
6
        public override string ToString()
        {
            string uit;
            uit = "Naam: " + PNaam + " " + "Nr: " + PNr + " " + "Aankomst: " + PAankomst + " " + "Status: " + Pstatus + " " +  BurstLijst ;
            return uit;
        }


Geeft volgende fout:
Error 1 'eindwerk.Burst' is a 'type' but is used like a 'variable'

En heeft betrekking op de eerste stuk code hier gegeven.

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Edde gij MSN? Want dit is niet echt iets voor op het forum :+ Dit is puur debuggen, voeg me maar toe, staat in m'n profiel.

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Topicstarter
Nog maar eens een vraagje: Ik had graag in de listbox3 enkel de naam gewild (dit lukt nog steeds niet met die extendBurst, heb deze dan in commentaar gezet).
Indien de gebruiker op een naam drukt in de listbox3, had ik graag in de listbox4 de eigenschappen gewild. Het is allemaal een lijst. De listbox3 laat enkel maar een member zien van de lijst. Als men hierop klikt, zou de andere members in listbox4 te zien moeten zijn.

Deze code heb ik al:
C#:
1
2
3
4
5
6
string curItem = listBox3.SelectedItem.ToString();
            String GeselecteerdeNaam = listBox4.FindString(curItem);
            foreach (GeselecteerdeNaam is List<Proces>)
            {
                return listBox4.DataSource = Proces;
            }


Vijf fouten, redelijke kleintjes precies maar ik begrijp het allemaal niet meer hoor :(

Error 1 Identifier expected, 'is' is a keyword
Error 2 ) expected
Error 3 ; expected
Error 4 Invalid expression term ')'
Error 5 ; expected

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:42
Sorry hoor, maar dit verzand hier niet alleen in basic debugwerk, maar ook gewoon in het oplossen van syntax fouten... foutboodschappen lezen, code begrijpend lezen en desnoods eens de juiste syntax in de MSDN opzoeken lost je probleem op ....

Nouja, ... lost je probleem op. Da's ook weer niet helemaal waar. Maar als ik die 5 regels code bekijk, dan denk ik gewoon dat je eens dringend je cursus moet herbekijken.
foreach & is ? dat kan een typo zijn ...
In je return statement een assignement... Indien dit al compileert in C#, hoop ik dat je weet wat je hier (altijd) als resultaat zult krijgen ?

[ Voor 43% gewijzigd door whoami op 20-03-2008 16:04 ]

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.