2009-10-08 8 views
2

J'ai un formulaire Windows qui a un contrôle DataGrid (pas DataGridView) dessus.DataTable Annuler la ligne Supprimer

Le contrôle DataGrid est lié à un DataTable. Chaque fois que l'utilisateur appuie sur le bouton Supprimer sur l'une des lignes de la grille, je veux vérifier une condition et arrêter la suppression de la ligne si la condition est fausse.

Je me suis abonné à l'événement RowDeleting du DataTable, mais je ne trouve pas le moyen d'annuler l'opération de suppression effectuée par l'utilisateur. Comment puis-je atteindre cet objectif ?

Répondre

1

Rubens

Merci pour votre réponse. J'avais déjà recherché ce fil, mais je ne pouvais pas trouver une solution utile.

J'ai juste légèrement modifié mon projet, j'ai maintenant un bouton de suppression au lieu de supprimer directement de la grille de données elle-même.

J'ai changé DataTable pour interdire toute supprime

dataTable.DefualtView.AllowDelete = false 

et dans le gestionnaire de clic de bouton supprimer, je l'ai écrit le code suivant:

(datagridStandardRates.DataSource as DataTable).Rows[datagridStandardRates.CurrentRowIndex].Delete(); 

Cela me donne un contrôle complet sur quand je veux supprime une ligne.

Merci encore pour votre aide.

Raghu

0

Ma première pensée était de suggérer "e.Cancel = true;" mais cette propriété n'est pas disponible. Google sur un peu je suis tombé sur How do I cancel a row delete in a DataSet; S'il vous plaît, jetez un oeil.

HTH

+0

wow, c'est une vieille réponse; Je viens de mettre à jour le lien –

4

Bien que ce fil est de 2 ans, j'ajouter la réponse juste au cas où quelqu'un tombe par hasard.

Pour chaque ligne d'un DataTable, il existe la méthode "RejectChanges()" que vous pouvez utiliser pour annuler une suppression.

Je fis comme suit:

a) DataTable, ajoutez un "RowDeleted" Handler:

dt.RowDeleted += new DataRowChangeEventHandler(dt_RowDeleted); 

b) Dans le gestionnaire, appelez les functon "RejectChanges()" comme suit:

void dt_RowDeleted(object sender, DataRowChangeEventArgs e) 
{ 
    if (... Add your condition here ...) 
     e.Row.RejectChanges(); 
} 
+0

juste pour ajouter une note rapide à la réponse de Georg. Faites comme il le fait, et n'essayez pas de rejeter la suppression de l'événement _deleting_-. Parce que, bien, cela ne fonctionne pas: -D – phareim

1

Beaucoup plus facile que les solutions ci-dessus.

Dans l'événement UserDeletingRow, appelez simplement e.Cancel = true;

DialogResult dlgRes = MessageBox.Show("Are you sure that you want to delete this Factor?", "DELETE ITEM?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); 
if (dlgRes == DialogResult.Yes) 
{ 
    //WBSDA.Delete(dgvR.Cells["WBSID"].Value.ToInt()); 
    tslMessage.Text = "Item Deleted"; 
} 
else 
    e.Cancel = true; 
+0

cela empêche également d'annuler la valeur de la cellule éditée. Cela peut vous ennuyer. si vous voulez annuler les changements sur la cellule actuelle !!! –

Questions connexes