2009-07-23 6 views
2

je manque quelque chose ici ...ASP.net ListView Contrôles d'accès en cas ItemUpdating

J'ai besoin d'accéder aux valeurs des contrôles sur l'élément qui quitte editmode, ItemUpdating tir ainsi.

J'ai trouvé comment obtenir la valeur de clé pour savoir quel enregistrement dans la base de données je dois mettre à jour. Le problème est que je n'arrive pas à accéder aux valeurs des contrôles sur la ligne d'édition. Le EditTemplate contient quelques cases à cocher, une liste déroulante et une zone de texte. J'ai besoin d'accéder à ces valeurs pour pouvoir mettre à jour le dossier.

Lorsque vous regardez le eventargs, rien ne s'affiche.

Je pense que je néglige quelque chose de crucial ici, toute aide serait pratique.

+0

Pouvez-vous publier votre gestionnaire d'événement ItemUpdating? –

+0

Quelle source de données utilisez-vous? Avez-vous une ObjectDataSource pour laquelle vous essayez d'écrire une méthode de mise à jour? –

Répondre

0

Il y a deux façons de penser à cela. La première solution consisterait à utiliser une source de données prenant en charge une commande de mise à jour et utilisant une liaison bidirectionnelle pour mettre à jour les valeurs. Les extraits suivants utilisent la liaison bidirectionnelle pour renseigner les champs de nom et d'étudiant et ils seront également mis à jour pour vous.

<EditItemTemplate> 
      <tr style="background-color: #FFCC66;color: #000080;"> 
       <td> 
        <asp:Button ID="UpdateButton" runat="server" CommandName="Update" 
         Text="Update" /> 
        <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" 
         Text="Cancel" /> 

       </td> 
       <td> 
        <asp:TextBox ID="nameTextBox" runat="server" Text='<%# Bind("name") %>' /> 
       </td> 
       <td> 
        <asp:TextBox ID="studentTextBox" runat="server" Text='<%# Bind("student") %>' /> 
       </td> 
      </tr> 
     </EditItemTemplate> 

Si vous n'utilisez pas une source de données qui prend en charge cela, vous pouvez faire autre chose. Remarquez comment le bouton de mise à jour a une commande appelée "Mise à jour". Vous pouvez l'utiliser pour récupérer les valeurs de contrôle souhaitées en manipulant les vues de liste ItemCommand Event.

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Update") 
     { 
      TextBox box = (TextBox)e.Item.FindControl("nameTextBox"); 

      string name = box.Text; 
     } 
    } 

Vous pouvez trouver tout contrôle dans l'élément editied en appelant simplement le contrôle de trouver et passer l'ID du contrôle, et ne pas oublier le casting.

Hope this helps

+0

en passant par la ItemCommand au lieu de ItemUpdating est en effet la solution pour moi car je n'utilise pas de DataSource :) merci! –

+0

réouverture ... J'ai toujours un problème, car en utilisant la commande Update dans l'aspx, il attend un événement ItemUpdating, que j'attrape maintenant dans ItemCommand. Cela lance une erreur. lorsque j'utilise un autre nom de commande, je semble avoir des problèmes avec viewstate lorsque je recharge ma liste ... des idées? –

+0

Je pense que j'ai besoin de voir du code avant de pouvoir vous aider, le nom de la commande ne doit pas provoquer une erreur dans ItemCommand. Aussi continuez-vous à gérer l'événement ItemUpdating? Si vous êtes, je ne suis pas sûr que vous en ayez vraiment besoin. Je pense que vous pouvez faire tout ce que vous faisiez dans l'événement ItemUpdating dans l'événement ItemCommand. Aussi, pouvez-vous être plus informatif sur votre problème viewstate lors du rechargement de la lis? – cptScarlet

2

Vous pouvez également utiliser "ListView.EditItem.FindControl (" X ")" pour le contrôle d'accès directement.

Protected Sub ListView_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewUpdateEventArgs) Handles ListView.ItemUpdating 

     Dim DropDownListddl As DropDownList = ListView.EditItem.FindControl("DropDownListddl") 

     Lblwarning.Text = DropDownListddl.SelectedValue 
End Sub