Kan du forresten ikke bare kopiere rækkerne over: private void MergeTable(DataTable sourceTable,DataTable destinationTable) { foreach (DataRow row in sourceTable.Rows) { destinationTable.Rows.Add(row); } }
med samme tabelstruktur burde det vel være iorden?
Så skal du enten merge som jepsen foreslog (kan kun gøres på datasets), eller bruge den anden fremgangsmåde jepsen også foreslog. Du kan dog ikke bruge den direkte :
foreach (DataRow row in sourceTable.Rows) { destinationTable.Rows.Add(row); }
Vil smide en exception, men du kan bruge foreach (DataRow row in sourceTable.Rows) { destinationTable.ImportRow(row); }
Cool..jepsen99 jeg brugte dit eksempel så jeg er næsten nødt til at gi dig point :) Du var først ude...Sorry Snepnet....Men også tak for hjælpen til dig :)
okay....jeg bliver nødt til at sige at alt ikke er helt vel alligevel. Det virker fint hvis jeg kun skal kopiere en tabel over i den anden...Men så snart jeg begynder at kalde den succsetivt x-antal gange.....mere end 1 gang får jeg følgende fejl:
System.Data.IDbDataAdapter ida=new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [forlaengtabel] WHERE certId='"+certId+"'",connectionstr); System.Data.DataSet ds=new System.Data.DataSet(); ida.Fill(ds); forlaengninger=mergeTables(forlaengninger,ds.Tables[0]); /****************************************************************/ } } Så det der sker er at for hver gennemløb i mainReport datatable skal der laves et opslag i databasen baseret på certID og disse data skal apendes til min forlaengninger datatable. Er i med på hvad der sker? Og så får jeg ovenstående fejl.....Hvad kan jeg gøre for at hele tiden apende den nye forlaengtabel på den gamle??
hej bumle... prøv at læs den jeg skrev her 05/11-2004 15:11:07 (den exception du får er den jeg henviste til.... du skal bruge ImportRow hvis du vil have en kopi af rækken ind).
Hmmm det ser ud til at virke....Men jeg er løbet ind i et andet problem nu...Håber det er okay jeg spør her...Ellers opretter jeg et nyt spg. til dig. Problemet er at jeg skal bruge de her datatables til at generere nogle certifikater i pdfform(vha. crystal reports). Det duer også fint, men grunden til at jeg skal lave alt det her datatablemerging er fordi jeg skal skrive måske 100 rapporter ud på en gang. Det er jo godt nok lidt tidskrævende, så jeg tænkte på om du ved hvor jeg sætter tidsfristen til en side der loades op. Jeg får nemlig en "web application not available" fejl efter jeg har ventet i 1 minuts tid..
man kan sætte timeouts på forskellige ting - dels på applikationsniveau (det er noget du gør på IIS'en, dit applicationsite/properties/virtual directory/configuration/options/script timeout (står typisk til 90 sekunder som default).
men der er visse ting... f.eks. kald til databaser og den slags hvor du kan gøre det seperat på dem (men du er nok stadig bundet til det der står i IIS'en).
du kan også gøre det, at du starter det op i en tråd for sig - og så spørger på den engang imellem. dette kan gøre på en meget elegant måde, så du faktisk kan realisere en rimelig reel statusbar hos klienten (uden at brugeren oplever postbacks undervejs), men der skal lidt forskellige trix til for at fikse det på den måde.
Hmmm ja...måske en meget sej ide den med tråden.....Hvordan skulle jeg gøre det i praksis. lige nu har jeg jo en .aspx side der i pageload hiver et par parametre ud af querystring kalder reportHandleren som opretter rapporten, og derefter får rapporten ud som en bytearray(pdfform) som jeg skriver til klient vha. response.binarywrite. Hvis jeg fx. skulle vise en statusbar hos klienten som indikerer hvor langt tråden er kommet med at loade rapporterne...hvordan skulle jeg lave det?
Nogle hovedtræk der kunne realiserer det kunne være som følger :
1) På kommandoen om at der skal genereres en rappport, opretter du (og starter tråden).
2) Du renderer siden tilbage til brugeren med en statusbar ell. (sådan lidt "dine rapporter er ved at blive genereret blablabla.")
3) På siden har du et javescript som er i stand til at påvirke din statusbar på baggrund af oplysninger den henter på serveren. Til det skal du bruge en form som kan spørge på status på din tråd, og skrive denne status tilbage. Scriptet vil så med et passende interval* spørge serveren om den nye status, og denne status vil så blive vist i status baren.
4) Når tråden er kørt færdig kan den side brugeren kigger på så lave et postback, og vise resultatet på samme siden - eller ved at redirecte til en resultatside.
* Hvis du har sådan en "dobbelt-statusbar" der øverst viser fremgang for nuværende, og nederst viser total fremgang, kan du gøre det på den måde at scriptet forespørger om nu status når den øverste bar er udfyldt... Det giver en ganske god effekt. (en lille teksboks, hvor der står hvad der indtil videre er sket plejer også at give en god effekt.... f.eks. "Der er genereret X ud af Y rapporter" X og Y er så også det du bruger til at vise den totale fremgang).
Superfed ide :) Jeg prøver at lege lidt med den :) Tak skal du have...
Synes godt om
Ny brugerNybegynder
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.