[VB.NET] Datagrid: rowindex incorrect na verwijderen row

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Hallo,

Ik ben bezig met een applicatie op Windows Mobile 6 in VB.NET.
Indien ik een DataTable weergeef in een DataGrid en ik verwijder een row middels de code. Een klant kan namelijk erachter komen dat hij een verkeerde ingave heeft gedaan in een voorgaand proces.
code:
1
TableName.Rows.RemoveAt(IndxWaarde)

Dan wordt de row netjes uit de DataGrid verwijderd, echter wanneer ik nu een row toevoeg met
code:
1
TableName.Rows.Add(workRow)

Dan krijgt deze ten eerste een index 1 hoger dan de row die is verwijderd, je zou verwachten dat het DataGrid weer opnieuw geïndexeerd zodat van 0..N geen lege indexen bestaan en als je deze row vervolgens wil verwijderen krijg je de volgende foutmelding IndexOutOfRangeExeption. En dit terwijl de code
code:
1
IndxWaarde = DataGrid.Item(DataGrid.CurrentRowIndex, 0)

de waarde van de row index aangeeft die in het DataGrid wordt weergegeven.....

Wil ik iets dat niet kan, of klopt mijn aanpak niet, of dient er iets gerefreshed te worden na elke delete row uit het DataGrid.
Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 13-09 21:30
Is de tabel gebound aan een database-datasource en is de index daarvan een auto increment primary key?

Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Is de tabel gebound aan een database-datasource en is de index daarvan een auto increment primary key?
Item is bij mij de index
code:
1
2
3
Item.AutoIncrement = True        'waarde wordt automatisch opgewaardeerd
Item.AutoIncrementSeed = 0     'start waarde
Item.AutoIncrementStep = 1


Daarnaast
[code]
De tabel is niet gebound aan een database-datasource. Leek me een beetje overkill om lokale barcode scan resultaten (barcode, aantal) in een lokale database op te slaan, gezien performance, geheugen etc.

Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Het blijkt removeAt niet het gewenste resultaat geeft wat ik hier beoog. Ik vond de volgende opmerking op het Net.
It removes the data from the dataset and makes it impossible to do an update.
En in mijn optiek is dat ook het probleem. Ze zijn niet meer echt gekoppeld. Dit zou wel mogelijk zijn met DataGridView, echter die wordt niet gesupport door CF2.0, waarin ik werk en dien te gebruiken :(
op deze link http://www.pcreview.co.uk/forums/thread-1412408.php staat dat ik de datarow.delete zou moeten toepassen. We gaan kijken of dat gaat lukken.

Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Mastermind schreef op dinsdag 03 augustus 2010 @ 09:40:
Is de tabel gebound aan een database-datasource en is de index daarvan een auto increment primary key?
Mag ik weten waarom je deze vraag hebt gesteld?

Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Het probleem is gevonden. Nadat ik alles heb gelogd wat in de onderliggende DataTable werd weggeschreven kwam de oplossing in de buurt.
Om een row te verwijderen uit een DataGrid dien je de volgende code te gebruiken
code:
1
2
  IndxWaarde = DataGrid.CurrentRowIndex    'Echte index waarde
  TableScan.Rows.RemoveAt(IndxWaarde)

En niet
code:
1
2
  IndxWaarde = DataGrid.Item(DataGrid.CurrentRowIndex, 0) 'Leest waarde uit eerste Cell
  TableScan.Rows.RemoveAt(IndxWaarde)

Want dan gebruik je de waarde uit de eerste colom van de betreffende row.

Nu nog eens kijken of je de waardes van de eerste Kolom kunt synchroniseren met de Row Index.....
Dan krijg je in de DataGrid ten minste geen missende items.
Pagina: 1