while(MyEnumerator.MoveNext()) { !!!!!!!!-----> Fejl her, melder: Object reference not set to an instance of an object. DataRow Row = MyDataTable.Rows.Find(MyEnumerator.Current); Row.Delete(); !!!!!!!!<-----
umiddelbart ser det lidt underligt ud, at du tilføjer "kategori" som primær nøgle på tabellen, og derefter prøver at finde en række udfra en værdi i et array du har hentet med en metoder der hedder GetArrangementID(...) (man forestiller sig lidt at der skulle komme arragementid's tilbage på den).
men bortset fra det - så skulle din kode være god nok (så vidt jeg lige kan se).
mit bedste gæt er - at du henter de gale id's til dit array, og at du derfor får en null-reference på det row du laver i loopet.
jeg kan ikke lige så hvordan nedenstående skulle give dig en null-reference ud fra den kode du har sendt. DataRow Row = MyDataTable.Rows.Find(MyEnumerator.Current); men den efterfølgende Row.Delete() vil kunne gøre det.
Jeg har selv rodet i det med primærnøglen for nøglen er en sammensatnøgle, bestående af Kategori og ArrangementID, men hvordan får jeg sat det som nøgle?
Jeg søger på ArrangementID da jeg ønsker, at slette rækker såsom: Dans - 1 Musik - 1 Sport - 1 Musik - 2 Sport - 2
Jeg har test med numeriske værdier for at test om det var forkerte værdier som metoden GetArrangementID returnerede, det gav samme resultat
DataRow Row = MyDataTable.Rows.Find(MyEnumerator.Current); Row.Delete(); <--- Row skulle være det eneste der kan være null i det du har sendt.
så..... på en eller anden måde laver du en .Find(key) der returnerer null... altså MyEnumerator.Current antager en værdi som ikke findes som nøgle i nogle af dine rækker.
så hvis du starter med at forsøge med en nøgleværdi du ved forefindes i din tabel, så skulle koden ikke fejle... sådan lidt som dette :
jeg kender ikke dine data, eller den metode der sætter din arraylist, så det kan jeg ikke rigtig byde ind på, men den nøgle du angiver på tabellen selv - er den eneste du har, så det er den du skal ramme.
jamen velbekomme.... du kan godt have flere kolonner som key... det er jo et array du giver den : ds1.Tables[0].PrimaryKey = new DataColumn[] {ds1.Tables[0].Columns[0]}; der ville du så kunne : ds1.Tables[0].PrimaryKey = new DataColumn[] {ds1.Tables[0].Columns[0],ds1.Tables[0].Columns[0]};
og du kan også efterfølgende søge på dem : (nedenstående er stort set bare copy fra docs)
private void FindInMultiPKey(DataTable myTable){ DataRow foundRow; // Create an array for the key values to find. object[]findTheseVals = new object[3]; // Set the values of the keys to find. findTheseVals[0] = "John"; findTheseVals[1] = "Smith"; findTheseVals[2] = "5 Main St."; foundRow = myTable.Rows.Find(findTheseVals); // Display column 1 of the found row. if(foundRow != null) // tjah... så har du dem så her i foundRow }
(jeg smider lige et svar hvis du kunne bruge det til noget). mvh
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.