2009-12-16 6 views
0

J'ai un simple gridview (bon c'est maintenant) il peuple, je peux l'éditer. mais quand il s'agit de mise à jour, je ne peux tout simplement pas le faire fonctionner.mettre à jour un gridview retourne toujours des paramètres null

Le code suivant crée un gridview qui recherche pour les utilisateurs dont le nom commence par un « c » (qu'est à dire une partie de mon filtrage j'épiler)

Le problème est quand je clique sur le bouton de mise à jour, il ne sera pas mise à jour . La procédure stockée est appelée mais tous les paramètres qui lui sont passés sont null. par conséquent, la base de données n'est pas mise à jour.

Je sais que c'est un problème simple avec une solution simple, mais je ne peux pas le voir.

J'ai essayé d'utiliser ExtractValuesFromCell dans l'événement onupdating et j'ai toujours obtenu des valeurs nulles. Je devais ajouter le CausesValidation="false" car sans cela les événements de mise à jour n'étaient même pas appelés.

Toute aide est appréciée

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AutoGenerateColumns="False" DataSourceID="SqlDataSource3" 
    DataKeyNames="UserId"> 
    <Columns> 
     <asp:CommandField ShowEditButton="True" CausesValidation="false" /> 
     <asp:BoundField DataField="UserName" HeaderText="UserName" 
      SortExpression="UserName" /> 
     <asp:BoundField DataField="MobileAlias" HeaderText="MobileAlias" 
      SortExpression="MobileAlias" /> 
     <asp:BoundField DataField="DistrictId" HeaderText="DistrictId" 
      SortExpression="DistrictId" /> 
     <asp:BoundField ReadOnly="true" DataField="UserId" HeaderText="UserId" 
      SortExpression="UserId" /> 
    </Columns> 
</asp:GridView> <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
    ConnectionString="<%$ ConnectionStrings:REMConnectionString_development_dev %>" 
    SelectCommand="LoadUser" SelectCommandType="StoredProcedure" 
    UpdateCommand="UpdateUser" UpdateCommandType="StoredProcedure" 
    onupdating="SqlDataSource3_Updating"> 
    <SelectParameters> 
     <asp:Parameter DefaultValue="c" Name="UserName" Type="String" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="UserId" Type="String" /> 
     <asp:Parameter Name="DistrictID" Type="Int32" /> 
     <asp:Parameter Name="UserName" Type="String" /> 
     <asp:Parameter Name="MobileAlias" Type="String" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

le seul code dans le code-behind est

protected void SqlDataSource3_Updating(object sender, SqlDataSourceCommandEventArgs e) 
{ 
} 

Il est là pour que je puisse déposer dans un point d'arrêt et vérifiez les paramètres, qui sont tous là mais avec des valeurs nulles

+0

vous pouvez poster le contenu de votre mise à jour procédure stockée –

+0

ont un coup d'oeil à ce tutoriel, vous avez peut-être manqué quelque chose: http://www.asp.net/(S(pdfrohu0ajmwt445fanvj2r3)) /learn/data-access/tutorial-49-vb.aspx –

+0

Merci Tony. J'avais déjà téléchargé les échantillons de ce lien. C'est une excellente ressource et je souhaite seulement que je l'ai trouvé beaucoup plus tôt certaines des décisions de conception que j'ai prises ont pu être différentes. – DeveloperChris

Répondre

0

Ok J'ai eu l'occasion de faire d'autres recherches et j'ai confirmé le problème.

La définition de l'ID de la page maître dans la fonction Page_load est le problème. Il doit être défini dans Page_Init.

Cette page fournit une bonne explication
http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=469

Ainsi, en déplaçant ID= "REM"; de page_load à Page_init le problème a par magie.

Malheureusement, il est courant de recommander le réglage de l'ID Page_Load sur lequel j'ai compté et qui s'est avéré être un mauvais conseil.

DC

0

Quelque chose d'autre doit être à l'œuvre ici. J'ai répliqué le code que vous avez fourni et quand je décompose les arguments d'événement je vois les valeurs et tout fonctionne correctement. Pourriez-vous éditer votre message et inclure tout le code?

+0

Vous avez raison, j'ai trouvé la cause du problème mais cela pose un autre problème. La cause du problème était cette ligne dans la méthode page_load sur la page maître 'ID = "REM";' Par exemple: ctl00 $ DistrictSelectorContent $ District change en $ REM DistrictSelectorContent $ District dans l'objet Request. Pas beaucoup d'amélioration, mais à mon avis moins maladroit que le défaut. Pourquoi il a cassé la fonction de mise à jour, je n'ai aucune idée. De toute évidence quelque chose à voir avec le viewstate. La question est maintenant comment puis-je implémenter une alternative à 'ID = "REM"'? – DeveloperChris

Questions connexes