Avatar billede weis Nybegynder
21. april 2007 - 13:11 Der er 9 kommentarer og
1 løsning

Visning af indhold i en ArrayList og søgning

Jeg er ved at lave en mp3 afspiller. Jeg har startet med at lave en funktion som gennemsøger et valgt bibliotek (med undermapper) for mp3 filer og indsætter det i en ArrayList. Min ArrayList undeholder så en string pr sang med informationerne (adskilt med semikolon):

filestien;Album navn;Kunstner;Sangens længde

Jeg har så forsøgt mig med at få alt infoen ind i en ListView, men det kan tage noget tid!
- Derfor findes der en bedre måde at få informationerne vist på skærmen?

En anden ting er at jeg gerne vil kunne søge i sangene, helst sådan at når man skrive et ord i en textbox så viser den løbende alle de sange der passer på det/de ord der bliver skrevet, hvordan laves det bedst?
Avatar billede nico26 Nybegynder
21. april 2007 - 17:38 #1
har du husket at bruge BeginUpdate() og EndUpdate()? dette gør at listviewet ikke laver et redraw hver gang du indsætter et item:

listView1.BeginUpdate();
try
{
    //indsæt data her
}
finally
{
    listView1.EndUpdate();
}
Avatar billede weis Nybegynder
21. april 2007 - 17:52 #2
det kender jeg ikke til. Min kode hvor keg løber min arraylist igennem, ser sådan her ud!

listView1.Columns.Clear();
                listView1.Items.Clear();
                listView1.Columns.Add("Filnavn", 350, HorizontalAlignment.Left);
                listView1.Columns.Add("Kunstner", 200, HorizontalAlignment.Left);
                listView1.Columns.Add("Album", 200, HorizontalAlignment.Left);
                listView1.Columns.Add("Længde.", 130, HorizontalAlignment.Left);
                int antal = liste.Count;

                    for (int i = 0; i < antal; i++)
                    {
                        string[] file = (liste[i].ToString()).Split(new Char[] { ';' });
                        //MP3File mp3File = ID3reader.ReadID3Tags(file);
                        ListViewItem item = new ListViewItem();
                        item.Text = file[0];
                        item.SubItems.Add(file[1]);
                        item.SubItems.Add(file[2]);
                        item.SubItems.Add(file[3]);
                        listView1.Items.Add(item);
                    }


Er der andet man kan bruge end listview, nu når jeg skal kunne søge, for så skal listview jo kun vise de ting der passer til min søgning!
Avatar billede weis Nybegynder
21. april 2007 - 19:21 #3
et at mine problemer med "ventetiden" er at den går kold når der er mange filer, kan man ikke gøre sådan at den "køre i baggrunden" og så viser en progressbar hvor langt den er og så tilsidst vises alle numrene.
Avatar billede nico26 Nybegynder
21. april 2007 - 19:29 #4
Som sagt skulle BeginUpdate() og EndUpdate() minimere overheadet ved at indsætte mange items

listView1.BeginUpdate();
try
{
    //indsæt data her
listView1.Columns.Clear();
                listView1.Items.Clear();
                listView1.Columns.Add("Filnavn", 350, HorizontalAlignment.Left);
                listView1.Columns.Add("Kunstner", 200, HorizontalAlignment.Left);
                listView1.Columns.Add("Album", 200, HorizontalAlignment.Left);
                listView1.Columns.Add("Længde.", 130, HorizontalAlignment.Left);
                int antal = liste.Count;

                    for (int i = 0; i < antal; i++)
                    {
                        string[] file = (liste[i].ToString()).Split(new Char[] { ';' });
                        //MP3File mp3File = ID3reader.ReadID3Tags(file);
                        ListViewItem item = new ListViewItem();
                        item.Text = file[0];
                        item.SubItems.Add(file[1]);
                        item.SubItems.Add(file[2]);
                        item.SubItems.Add(file[3]);
                        listView1.Items.Add(item);
                    }
}
finally
{
    listView1.EndUpdate();
}
Avatar billede weis Nybegynder
21. april 2007 - 19:42 #5
ja, det kan jeg se (fandt også ud af at jeg kørte min søgefunktion lige inden jeg indsatte i listview, så det er også ændret nu)

Men hvad så når jeg nu vil søge i mit listview, jeg vil gerne have lavet sådan at, efterhånden som man trykker noget ind i en textbox, så skal den vise alle dem der matcher det/de ord? den skal kun søge i kunstner og album og titel (som jeg ikke lige har fået tilføjet endnu)
Avatar billede nico26 Nybegynder
21. april 2007 - 19:49 #6
Kender du noget til søgealgoritmer?
Under alle omstændigheder vil jeg foreslå, at du gemmer alle dine items, i en datastruktur, f.eks. en ArrayList, og så foretage søgningen i denne. Efterhånden som du finder nogle der matcher, putter du dem så over i ListViewet, men beholder kopien i ArrayListen...
Avatar billede weis Nybegynder
21. april 2007 - 19:54 #7
jeg har aldrig arbejdet med søgning før.

Jeg har alle filerne i en ArrayListe hvor alle informationerne pr sang står i samme index, de er adskilt med et semikolon. er det nok eller skal det laves helt anderledes? Kender du nogle gode steder man kan læse om de søgealgoritmer?

Der skal helst ikke være nogen stor forsinkelse når der søges og heller ikke når søgningen nulstilles!
Avatar billede iluka Nybegynder
24. april 2007 - 13:22 #8
Søgning kan være noget langsommeligt noget, så pas på. Hvis du bare foretager en linær søgning igennem listen, og listen er lang så går det langsomt. Løsningen hedder binære søgetræer :)
Avatar billede weis Nybegynder
13. august 2007 - 22:58 #9
kom gerne med et svar!
Avatar billede nico26 Nybegynder
14. august 2007 - 16:15 #10
svar :)
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