Avatar billede juks Novice
29. januar 2008 - 09:34 Der er 11 kommentarer og
1 løsning

arraylist --generel hjælp

har en arraylist jeg kan godt læse den ind i listbox osv.
men jeg kan ikke splitte data så jeg kan manipulere med dem inden jeg læser dem ind i listen. Er der en der kan give mig lidt råd/vejld.
         

ArrayList List = DataAccessWrite.reader("Select * From konkurrence_tbl");
                   
  for (int i = 0; i < List.Count; i++)
            {
              string  [] t;
                string t1;
                string t2;
                string t3;
               
                t =  List[i].ToString ;
                t1 = t.Split(",")[0];
                //this.checkedListBox1.Items.Add(List[i]);

            }
Avatar billede powerpunk Nybegynder
29. januar 2008 - 10:25 #1
Jeg er ikke helt sikker på jeg forstår hvad det er du forsøger her...

Hvad er DataAccessWrite for en type?
hvordan ser dine data ud - og hvad er det du vil med dem...

Og endelig - Er du bundet til .NET 1.1? en generisk List<string> (2.0+) ville være en pænere løsning end en ArrayList...
Avatar billede juks Novice
29. januar 2008 - 10:30 #2
public static ArrayList reader (string tabel)
        //man kan kun angive hele tabeller ,da where også videre kan laves ved sortering etc.
   
    {

     
//create the database connection
OleDbConnection aConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\skytte\\skytte.mdb");

//create the command object and store the sql query
OleDbCommand aCommand = new OleDbCommand(tabel, aConnection);
    ArrayList list = new ArrayList(); 
        try
    {
aConnection.Open();

//create the datareader object to connect to table
OleDbDataReader aReader = aCommand.ExecuteReader();
//Console.WriteLine("This is the returned data from table");
int t;
 
    int n = aReader.FieldCount;
    string line;
//Iterate throuth the database
while(aReader.Read())
{            line ="";
    t = 0;
//MessageBox.Show  (aReader.GetString(1));
    while (n != t)
    {
        if (line == "")
        {
            line = (aReader.GetValue(t).ToString());
        }
        else
        {
            line = line + "," + (aReader.GetValue(t).ToString());
        }
        t++;

    }
    list.Add(line);
}

//close the reader
aReader.Close();

//close the connection Its important.
aConnection.Close();

}

//Some usual exception handling
catch(OleDbException e)
{
         
MessageBox.Show("Error: {0}"+ e.Errors );

}
return list;     
}
     
}       


det er en windows applikation og er ikke bundet af noget , men har bare tidligere brugt arraylist.

min arralist 3 felter og det sidste er dato og skal vises som "dd-mm-yyyy" problemet er at pt viser den det som dd-mm-yyyy:tt.mm.ssss
Avatar billede powerpunk Nybegynder
29. januar 2008 - 10:48 #3
Det er ikke ligeså generisk, men hvis du _ved_ at der er tre felter pr. record og kender datatypen kunne du vel omskrive til :

aConnection.Open();

//create the datareader object to connect to table
OleDbDataReader aReader = aCommand.ExecuteReader();

//Iterate throuth the database
while (aReader.Read())
{
  string line = string.Format("{0},{1},{2}",
    aReader.GetString(0),
    aReader.GetString(1),
    aReader.GetDateTime(2).ToShortDateString());

  list.Add(line);
}
Avatar billede juks Novice
29. januar 2008 - 10:49 #4
ja .men kan jeg ikke gøre det med arraylisten .. jeg bruger Dataaccesreader til så mange andre ting så det ville være skidt at ændre i den
Avatar billede powerpunk Nybegynder
29. januar 2008 - 10:50 #5
Dit 'problem' er jo at du på intet tidspunkt opfatter din dato som et dato-felt, og derfor bare default'er til DateTime.ToString().
Avatar billede juks Novice
29. januar 2008 - 10:55 #6
ja det ved jeg :-)

men nu har jeg jo problemet.
jeg kunne jo liste det hele ind i en listboks og derefter splitte også tage left(chr8 af split[2])

men troede man kunne gøre det direkte fra  listen
Avatar billede powerpunk Nybegynder
29. januar 2008 - 10:58 #7
Jeg ville til enhver tid vælge at manipulere data så tæt på datakilden som muligt.

Når du smider alle dine data ind som strenge i en ArrayList har du jo strippet dem for al typeinformation.

Men hvis du helst vil gøre det sådan kan det sagtens lade sig gøre.

for (int i = 0; i < List.Count; i++)
{
  string[] t =  List[i].ToString().Split(",");  //String array fra element i listen
  DateTime dt = DateTime.Parse(string[2]); //Læs sidste streng som DateTime
  t[2] = dt.ToShortDateString(); //Sæt den korte strengrepresæntation tilbage i listen
  List[i] = string.Join(",", t); //Opdater element i listen
}

Jeg vil så stadig mene at du ville være bedre tjent med en List<string> fremfor din arraylist, da du så slipper for at skulle ToString'e når du piller objekter ud af den...
Avatar billede powerpunk Nybegynder
29. januar 2008 - 11:00 #8
der skulle selvføgelig stå
DateTime dt = DateTime.Parse(t[2])
Avatar billede juks Novice
29. januar 2008 - 11:04 #9
Lige præcis denne her jeg ledte efter takker.

string[] t =  List[i].ToString().Split(","); 

..jeg kan ikke afvise at list<string> er bedre , fik bare at vide herinde (faktisk) at arraylist var bedre(da Arb jeg med txt filer.) men er lidt i tidspress og kan ikke lige overskue at bruge adnet :-) lige pt
Avatar billede juks Novice
29. januar 2008 - 11:10 #10
men den fejler i List[i].ToString().Split(","); 


Error    1    The best overloaded method match for 'string.Split(params char[])' has some invalid arguments
Error    2    Argument '1': cannot convert from 'string' to 'char[]'
Avatar billede powerpunk Nybegynder
29. januar 2008 - 11:19 #11
åh ja min fejl... prøv
List[i].ToString().Split(','); 

ArrayLists er på ingen måde bedre end generiske Lists.
Generiske lists er både hurtigere og mindre memory-tunge end ArrayLists

Nu propper du så vidt jeg kan se kun strings i den, og så vil List<string> absolut være et pænere valg.

Så længe du opererer med reference types er ArrayList ikke helt skidte.
Hvis du derimod fyldte ints eller floats i den ville du skulle box'e og unbox'e hver gang du tog elementer ind og ud. her ville en typed collection (List<int>) langt være at foretrække.

Det eliminerer alt andet lige også en række potentielle fejl at bruge en typesikker collection. Med en ArrayList har du jo i princippet ingen garanti for at det rent faktisk er strings der ligger i den...

Hvis du er i bekneb med tid kan du sagtens fortsætte med din ArrayList. Men tag og kig lidt på List<T> når du engang får tid...
Avatar billede juks Novice
29. januar 2008 - 11:24 #12
tusind tak for hjælpen
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