Avatar billede marvinq Nybegynder
18. december 2008 - 11:25 Der er 10 kommentarer og
1 løsning

Tabelvisning af array

Hej eksperter,

Jeg er ikke så hård i Visual Studios grænseflader... Jeg står med et problem, som jeg ikke rigtig kan se løsningen på. Jeg skal bruge en listbox, som præsenterer en række data, og som ved klik på linjen kan affyre en event med rækkens indhold som parameter.

Men... indholdet i listen skal være en arraylist/list af objekter, så jeg vil gerne have det præsenteret som en tabel, men hvor jeg stadig kan klikke på linjerne så der sker en event. Hvordan klarer jeg det??

På forhånd tak.
Avatar billede aaberg Nybegynder
18. december 2008 - 11:31 #1
En ListBox kan ikke præsenteres som en tabel. Det lyder mere som om du skal bruge en ListView i Details view. Eventuelt tag et kig på denne kontrol:
http://www.codeproject.com/KB/list/ObjectListView.aspx
Avatar billede marvinq Nybegynder
18. december 2008 - 14:07 #2
Der ser umiddelbart rigtigt ud, men kan da slet ikke få den demo til at virke - så ved ikke helt hvordan jeg indlæser objekter til listen.

Kan godt indlæse, men der kommer ikke noget i hverken rækker eller kolonner

Kan du hjælpe med et eksempel på det??
Avatar billede aaberg Nybegynder
18. december 2008 - 14:40 #3
Ok, her kommer en step by step forklaring.

Download DLL filen fra websiden jeg refererer til i min tidligere kommentar.
Fra Visual Studio højreklikker du på toolboxen, og trykker "Choose Items..."
Trykk "Browse...", og find dll filen du downloadede, trykk OK ud af dialogboksene.
Nu skulle du gerne have fået et par nye komponenter i toolboxen. Træk og slip en ObjectListView ind på din form.
Sørg for at den nye objectListView er selected.
Fra Properties vinduet, sætter du FullRowSelect til "true".
Fra Properties vinduet finder du "Columns" propertien, vælg den og tryk på den lille "..." knap.
Nu åbnes en dialogboks. Her skal du tilføje de kolonner som skal vises i ListView'en. For hver kolonne skal "AspectName" sættes til navnet på din property i objekterne, som skal sættes ind i den givne kolonne. "Text" sættes til teksten der skal ses i kolonne-headeren.
Når dette er gjort, mangler du bare at fylde den med objekter. Fra din kode skriver du eksempeltvis:
this.objectListView1.Objects = myArrayList;

Bare spørg, hvis der er noget der er uklart.
Avatar billede marvinq Nybegynder
18. december 2008 - 15:02 #4
Jamen det var da helt perfekt hjælp! Det er lige nøjagtig det jeg søgte. Helt perfekt liste. Super hjælp!

Takker og bukker.!

Smid et svar.

/MHQ
Avatar billede aaberg Nybegynder
18. december 2008 - 15:16 #5
:-)

Jeg har efterhånden brugt ObjectListView komponenten i en del projekter. Genialt komponent.
Avatar billede marvinq Nybegynder
18. december 2008 - 15:41 #6
Det kan jeg virkelig kun give dig ret i..! Det er sq små genialt det der !!

Takker.!
Avatar billede marvinq Nybegynder
19. december 2008 - 21:51 #7
Hej aaberg_cc

Forstyrer lige igen... håber du stadig "lytter".

Jeg har en række variabler, som kommer ind fra en webservice. Det fungerer ganske fint, men jeg har et datetime felt, som jeg gerne vil have repræsenteret i listen som en shortdate. - altså så tiden forsvinder.

Kan det lade sig gøre?? Ved ikke rigtig hvordan jeg kan manipulere de data der kommer ind.

Ser frem til dit svar

/MHQ
Avatar billede aaberg Nybegynder
03. januar 2009 - 20:29 #8
Undskyld det sene svar, men jeg har ikke haft tændt en computer hele julen.

Først bør du give kolonnen et fornuftigt navn. Det gøres under Columns propertien (samme sted du sætter AspectName og Text). Propertien hedder "(Name)". I mit eksempel har jeg lavet en datokolonne som jeg har kaldt olvDateColumn.

I konstruktøren (eller Load eventet) på din form, skriver du:
this.olvDateColumn.AspectToStringConverter = new BrightIdeasSoftware.AspectToStringConverterDelegate(delegate(object o)
    {
        return ((DateTime)o).ToShortDateString();
    });

ObjectListView vil kalde den delegate som bliver sat i AspectToStringConverterDelegate propertien, for hver row, for at konvertere værdien til en string. I dette tilfælde er værdien en dato, så jeg caster til en DateTime, og kalder ToShortDateString() og returnerer resultatet.
Avatar billede marvinq Nybegynder
14. maj 2009 - 10:07 #9
Hej aaberg_cc,

Jeg tillader mig lige at stille et spørgsmål mere :)

Jeg kunne godt tænke mig at skifte farve på nogle af linjer i listen. F.eks. hvis jeg kontrollere om et felt i en linje indeholder en bestemt værdi, så skal den pågældende linje skifte farve, eller bare farveskift på teksten...

Ved du om det kan lade sig gøre, og i så fald hvordan?

/MHQ
Avatar billede aaberg Nybegynder
14. maj 2009 - 12:20 #10
Det kan godt lade sig gøre.

Lige efter kaldet til InitializeComponent() metoden i konstruktøren af formen, skriver du følgende kode:

this.objectListView1.RowFormatter = new BrightIdeasSoftware.RowFormatterDelegate(delegate(BrightIdeasSoftware.OLVListItem listItem)
{

  if (((dinKlasse)listItem.RowObject).FeltSomSkalTjekkes == 2)
      listItem.BackColor = Color.Blue;
});

Skift "dinKlasse" ud med navnet på den klasse som du har i din ArrayList. Skift "FeltSomSkalTjekkes" ud med det felt som du skal tjekke værdien på.
Avatar billede marvinq Nybegynder
14. maj 2009 - 13:10 #11
Super takker!

Jeg prøver.. mon ikke det virker

/MHQ
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester