2017-09-20 5 views
1

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);

+0

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). –

+0

@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

+0

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();' –

Répondre

2

Si vous souhaitez marquer toutes les lignes supprimées, pourquoi ne pas utiliser un foreach -loop?

foreach(DataRow row in DataTable1.Rows) row.Delete(); 

Delete marquera cette ligne comme Deleted qui est important pour DataAdapters, ils appelleront leur DeleteCommand pour supprimer cette ligne de la base de données. Mais il ne sera pas retirer la ligne du DataTable immédiatement. Si vous voulez l'enlever de la table, utilisez DataTable.Rows.RemoveAt(index).

+0

Cela fonctionne et si simple, se sentir stupide que je n'ai pas pensé moi-même – GuidoG