web-dev-qa-db-fra.com

Erreur: les informations de ligne supprimées ne sont pas accessibles via la ligne

À qui cela peut concerner, j'ai cherché beaucoup de temps pour trouver une issue à cette erreur

"Les informations de ligne supprimées ne sont pas accessibles via la ligne"

Je comprends qu'une fois qu'une ligne a été supprimée d'une table de données, elle n'est pas accessible de manière typique et c'est pourquoi j'obtiens cette erreur. Le gros problème est que je ne sais pas quoi faire pour obtenir le résultat souhaité, que je décrirai ci-dessous.

Fondamentalement, lorsqu'une ligne de "dg1" est supprimée, la ligne située en dessous prend la place de la ligne supprimée (évidemment) et hérite ainsi de l'index des lignes supprimées. Le but de cette méthode est de remplacer et de réinitialiser l'index des lignes (en le saisissant de la valeur correspondante dans l'ensemble de données) qui a pris la place des lignes supprimées et en tant que telle la valeur d'index.

Pour le moment, j'utilise simplement une étiquette (lblText) pour essayer d'obtenir une réponse du processus, mais elle se bloque lorsque la dernière instruction if imbriquée tente de comparer les valeurs.

Voici le code:

void dg1_Click(object sender, EventArgs e)
    {
        rowIndex = dg1.CurrentRow.Index; //gets the current rows
        string value = Convert.ToString(dg1.Rows[rowIndex].Cells[0].Value);

        if (ds.Tables[0].Rows[rowIndex].RowState.ToString() == "Deleted")
        {

            for (int i = 0; i < dg1.Rows.Count; i++)
            {

                if (Convert.ToString(ds.Tables[0].Rows[i][0].ToString()) == value) 
                // ^ **where the error is occurring**
                {
                    lblTest.Text = "Aha!";
                    //when working, will place index of compared dataset value into                                   rowState, which is displaying the current index of the row I am focussed on in 'dg1'
                }
            }
        }

Merci d'avance pour l'aide, j'ai vraiment fait une recherche, et s'il est facile de comprendre grâce à une simple recherche sur google, permettez-moi de me détester de façon répétée, parce que j'ai DID essayez.

  • gc
31
zillaofthegods

La valeur actuelle de la colonne de données dans l'instruction if interne ne sera pas disponible pour les lignes supprimées. Pour récupérer une valeur pour les lignes supprimées, spécifiez que vous souhaitez la valeur d'origine. Cela devrait corriger votre erreur:

if (Convert.ToString(ds.Tables[0].Rows[i][0, DataRowVersion.Original].ToString()) == value)
35
firedfly

Vous pouvez également utiliser la méthode AcceptChanges () du DataSet pour appliquer complètement les suppressions.

ds.Tables[0].Rows[0].Delete();
ds.AcceptChanges();
45
Gavin

Dans votre "plantage si", vous pouvez vérifier si la ligne est supprimée avant d'accéder à ses valeurs:

if (ds.Tables[0].Rows[i].RowState != DataRowState.Deleted &&
    Convert.ToString(ds.Tables[0].Rows[i][0].ToString()) == value)
{
    // blaaaaa
}

En outre, je ne sais pas pourquoi vous ToString () le RowState au lieu de le comparer à DataRowState.Deleted.

14
Tipx

après avoir supprimé la ligne, reliez votre grille avec le datatable, pas besoin de réinitialiser manuellement l'index, datatable le gère.

vous devez donc uniquement y relier la source de données de la grille.

0
TalentTuner