Pourquoi est-DataItem null pour un GridView ligne “null” lorsque vous essayez d'enregistrer les modifications?

Donc j'ai un GridView sur ma page web. Il est lié aux données, de sorte que lors de la RowDataBound événement de ce code fonctionne parfaitement bien:

    protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            TimecardApproval shift = (TimecardApproval)e.Row.DataItem;
        }
    }

La touche "shift" variable dispose de toutes les données dont j'ai besoin, fonctionne très bien. Mais ensuite il y a ce code pour enregistrer les données:

    protected void btnSubmitApprovals_Click(object sender, ImageClickEventArgs e)
    {
        foreach (GridViewRow item in gvTimeCards.Rows)
        {
            TimecardApproval shift = (TimecardApproval)item.DataItem;
            //code to update the row
        }
    }

DataItem est nul! Pourquoi? Étant donné que le champ est là, il semble étrange que c'est nul. Dois-je être en boucle sur quelque chose d'autre?

DataItem est définie lors de la liaison de données. Sur les publications, il est toujours null jusqu'à ce que vous DataBind le contrôle GridView à nouveau. Notez que toutes les variables sont éliminés à la fin de la page de cycle de vie. Qu'est-ce exactement avez-vous besoin dans btnSubmitApprovals_Click? Normalement, vous obtenez les contrôles dans le Lié-/TemplateFields.
La documentation dit: Le DataItem propriété est disponible uniquement pendant et après la RowDataBound cas d'un contrôle GridView. Pouvez-vous préciser le "après"?
Après signifie qu'après qu'il a été lié aux données dans la même page du cycle de vie (jusqu'à Unload).
l'obtention de l'original DataItem me semblait le plus logique pour trouver les champs qui ont été modifiés. Donc, vous dites que je peux relier le GridView dans la fonction de clic?
Non, vous ne peut pas relier le contrôle GridView. Puis vous devez remplacer tous les changements et de prévenir les événements d'être soulevées. Vous devez évaluer les contrôles ou de l'utilisation de la GridView RowUpdating événement avec son OldValues et NewValues propriétés.

OriginalL'auteur TheGerm | 2012-11-08