Avatar billede janni_jensen Nybegynder
24. oktober 2003 - 16:19 Der er 15 kommentarer og
1 løsning

Rækker i dataset forsvinder

Hej

Jeg har en metode som tjekker om en medarbejder er ledig.

int employeeID;
DataSet employedIDsDS = GetEmployedIDs(searchplace);
// HEr får jeg alle 16 medarbejderID = 16 rækker
// 2. Investigate each employeeId for status histories
for ( int i=0; i < employedIDsDS.Tables[0].Rows.Count; i++)
{
employeeID = (int)employedIDsDS.Tables[0].Rows[i]["EmployeeID"];
// Herinde forsvinder 3 medarbejder id, så der pludselig kun er 13 rækker
// 3. Remove employeeID if it has an entry in the status history
if (HasEntryInStatusHistory(employeeID, bookingStart, searchDate))
{
employedIDsDS.Tables[0].Rows[i].Delete();
employedIDsDS.Tables[0].Rows[i].AcceptChanges();
}
}
// Inden vi returnere kommer de 3 manglende rækker på igen, men uden at blive undersøgt om de er ledige...
return employedIDsDS;

Er der nogen der kan komme med en forklaring og løsning til dette? Gerne hurtigt?
Avatar billede finger Nybegynder
24. oktober 2003 - 16:46 #1
Der er ikke noget i den kode du viser inden step 3 der kan fjerne elementer i DataSettet. så der må være noget andet kode der gør det.
Det eneste der kunne være galt i den viste, er hvis der er 3 employees der ikke har et employeeID.
Avatar billede janni_jensen Nybegynder
24. oktober 2003 - 16:48 #2
Hvis jeg skriver dem ud  med en forløkke inden step 2 på præcis samme måde får jeg alle id, men lige så snart det kommer sammen med metoden HasEnty, så går der ged i det
Avatar billede janni_jensen Nybegynder
26. oktober 2003 - 14:59 #3
Er der ikke nogen der kan hjælpe, jeg tildeler gerne flere points!!!
Avatar billede nielslbeck Nybegynder
26. oktober 2003 - 16:12 #4
Har du prøvet at "steppe" igennem løkken og se hvad der sker? Jeg tror altså ikke helt på, at dataene forsvinder ud fra datasetet... Hvad sker der hvis du i løkken udskriver employeeID - får du så ikke alle 16 ID's?
Avatar billede janni_jensen Nybegynder
26. oktober 2003 - 17:01 #5
Nej ikke når det er inde i
for ( int i=0; i < employedIDsDS.Tables[0].Rows.Count; i++)
{
employeeID = (int)employedIDsDS.Tables[0].Rows[i]["EmployeeID"];
//Her får jeg kun 13 id skrevet ud
if (HasEntryInStatusHistory(employeeID, bookingStart, searchDate))
{
employedIDsDS.Tables[0].Rows[i].Delete();
employedIDsDS.Tables[0].Rows[i].AcceptChanges();
}
}

Hvis jeg fjerner:
if (HasEntryInStatusHistory(employeeID, bookingStart, searchDate))
{
employedIDsDS.Tables[0].Rows[i].Delete();
employedIDsDS.Tables[0].Rows[i].AcceptChanges();
}
og bruger samme løkke og skriver id ud, får jeg alle 16 ?????
Avatar billede nielslbeck Nybegynder
26. oktober 2003 - 17:04 #6
Nå ja, klart nok :-) Når du siger .Delete() forsvinder rækken jo fra datasetet - men din "i" kører jo bare videre opad... Når du sletter et element, skal "i" ikke tælles op, som den bliver i løkken!
Avatar billede nielslbeck Nybegynder
26. oktober 2003 - 17:05 #7
Prøv med noget i stil med (ikke testet):

int i = 0;
while (i < employedIDsDS.Tables[0].Rows.Count) {
  employeeID = (int)employedIDsDS.Tables[0].Rows[i]["EmployeeID"];
  if (HasEntryInStatusHistory(employeeID, bookingStart, searchDate)) {
    employedIDsDS.Tables[0].Rows[i].Delete();
    employedIDsDS.Tables[0].Rows[i].AcceptChanges();
  }
  else
    i++;
}
Avatar billede nielslbeck Nybegynder
26. oktober 2003 - 17:08 #8
Eller også kunne du bare sige .AcceptChanges() efter løkken...
Avatar billede janni_jensen Nybegynder
26. oktober 2003 - 17:16 #9
Problemet er at alle Id ikke kommer ind i metoden HasEntryInStatus, og bliver derfor ikke tjekket, så det er korrekt at rækken skal slettes, men de 3 ider der mangler kommer slet ikke med derind for at blive tjekket, altså

for ( int i=0; i < employedIDsDS.Tables[0].Rows.Count; i++)
{
employeeID = (int)employedIDsDS.Tables[0].Rows[i]["EmployeeID"];
skifter fra 16, til 15 til 14 til 13 og så kører den videre.
Det er index nr 3,5,7 i rækken der forsvinder
Avatar billede nielslbeck Nybegynder
26. oktober 2003 - 17:35 #10
Har du prøvet med mit kodeforslag? Er ikke helt med på, om det er det du har kommenteret til sidst...
Avatar billede janni_jensen Nybegynder
26. oktober 2003 - 19:58 #11
Ja det har jeg og der sker det samme som tidligere
Avatar billede nielslbeck Nybegynder
26. oktober 2003 - 20:02 #12
Og det er også index 3, 5 og 7 der forsvinder når du bruger while-løkken?
Avatar billede janni_jensen Nybegynder
26. oktober 2003 - 20:50 #13
Jeg havde ikke set while løkken men jeg har prøvet det nu og det eneste der kommmer ind i løkken er Id nr 50s, som kommer derind 16 gange
Avatar billede nielslbeck Nybegynder
26. oktober 2003 - 22:14 #14
Okay... lyder så rimelig mystisk! Bliver vist lige nødt til at sove på det... :-)
Avatar billede janni_jensen Nybegynder
26. oktober 2003 - 22:44 #15
Ja jeg ved det
Avatar billede janni_jensen Nybegynder
27. oktober 2003 - 15:29 #16
Jeg fandt ud af det. Når en række fjernes bliver også index fjernet og alle de næste række får derved nyt index. Så derfor kaldes efter forløkken acceptchanges på datasettet og ikke hver række, samtidigt skal man putte eller medarbjder id over i en arraylisten som der køres igennem med for løkken, derved bliver alle id der, isteder for de bliver fjernet ved metoden delete.
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