Dans mon projet, j'ai besoin de supprimer tous les enregistrements d'un DataTable, donc j'ai essayé ce code:Pourquoi DataTable.Rows.Count ne change-t-il pas après la suppression des lignes?
while (DataTable1.Rows.Count > 0)
DataTable1.Rows[0].Delete();
mais ceci est une boucle infinie, il semble que, après la déclaration du Delete()
Rows.Count
ne fait pas les changements.
Il semble que les enregistrements sont toujours présents mais marqués pour la suppression.
donc je changer mon compteur à ceci:
int count = DataTable1.Select("", "", DataViewRowState.CurrentRows).Count();
Alors maintenant, je peux changer ma boucle comme ce
int count = DataTable1.Select("","",DataViewRowState.CurrentRows).Count();
while (count > 0)
{
DataTable1.Rows[0].Delete(); // THIS IS WRONG NOW
count = DataTable1.Select("","",DataViewRowState.CurrentRows).Count();
}
Maintenant, le compte ne décompté comme prévu, mais maintenant j'ai un problème avec le Rows[0].Delete()
déclaration.
Il va supprimer la même ligne encore et encore. Donc, ma question est, comment puis-je trouver la première ligne qui n'est pas supprimée, et le supprimer?
En d'autres termes, la ligne qui est commentée avec // C'EST MOMENT MAINTENANT que puis-je utiliser sur cette ligne?
Ou y a-t-il une meilleure façon de faire cela? J'ai essayé DataTable1.Clear() mais cela ne génère pas d'instructions de suppression lorsque vous faites adapter.Update(DataTable1);
Si vous souhaitez supprimer les lignes de la table, utilisez DataTable1.Rows.RemoveAt (0) '. En utilisant 'DataRow.Delete' vous ne faites que définir l'état de la ligne à' Deleted' qui est nécessaire pour 'DataAdapters' qui met à jour DataSet/DataTable/DataRow, le' DeleteCommand' sous-jacent est appelé, ce qui effacera la ligne de la base de données ou quelle que soit la source était). –
@TimSchmelter L'idée est de supprimer les enregistrements dans DataTable1 et quand j'appellerai ultérieurement adaptateur.Update (DataTable1); il va ensuite les supprimer de la base de données – GuidoG
L'idée est bonne, ça marche? Si vous voulez marquer toutes les lignes supprimées, pourquoi n'utilisez-vous pas une boucle foreach? 'foreach (ligne DataRow dans DataTable1.Rows) row.Delete();' –