29. januar 2008 - 09:34Der 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]);
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();
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());
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...
..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
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[]'
å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...
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.