2009-08-15 5 views
1

J'ai un Gridview qui affiche une liste de contacts via un sqlDataSource.Supprimer l'utilisateur de la table et le fournisseur d'appartenance ASPNET avec sqlDataSource

Inclus est un modèle d'élément pour la suppression d'un enregistrement - un LinkButton - avec OnClientClick configuré pour utiliser du JavaScript: "return confirm ('Êtes-vous sûr de vouloir supprimer cet utilisateur?');" Cela donne à l'utilisateur une petite fenêtre avec une option Oui ou Annuler. Lorsque l'utilisateur est supprimé de la table des contacts, j'ai également besoin de supprimer le même utilisateur dans les tables d'adhésion AspNet à l'aide de l'instruction Membership.DeleteUser (UserName, true).

Le Contact.IntranetUserName colonne et UserName des tables d'adhésion contiennent les mêmes valeurs de données, de sorte que rend les choses pratique. Je ne sais pas quel événement utiliser, j'ai commencé à utiliser le OnRowCommand de Gridview - mais je n'arrive pas à comprendre comment récupérer la valeur de la colonne "IntranetUserName" de la ligne qui est supprimée (par le Template d'Item dans la Table de Contact) et passez-le à l'instruction Membership.DeleteUser.

Tout C# idées sur ce serait beaucoup appréciée. Peut-être devrais-je utiliser plutôt OnRowDeleted ou OnRowDeleting de GridView? Ou peut-être le LinkButtons OnCommand?

GridView et SqlDataSource ici:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ContactID" 
        DataSourceID="SqlDataSource2" Width="738px" OnRowCommand="deleteFromAspnetProvider" > 
        <Columns> 
         <asp:TemplateField ShowHeader="False"> 
          <ItemTemplate> 
           <asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="return confirm('Are you sure you want to delete this user?');" 
            CommandName="Delete" Text="Delete User"></asp:LinkButton> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:BoundField DataField="IntranetUserName" HeaderText="IntranetUserName" SortExpression="IntranetUserName" Visible="false" /> 

         <asp:BoundField DataField="FirstName" HeaderText="First Name" 
          SortExpression="FirstName" /> 
         <asp:BoundField DataField="LastName" HeaderText="Last Name" 
          SortExpression="LastName" /> 
         <asp:BoundField DataField="CompanyName" HeaderText="Company" 
          SortExpression="CompanyName" /> 
         <asp:BoundField DataField="EmailAddress" HeaderText="Email Address" 
          SortExpression="EmailAddress" /> 
         <asp:BoundField DataField="UserLevelType" HeaderText="UserLevelType" 
          SortExpression="UserLevelType" /> 
        </Columns> 
       </asp:GridView> 

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DataConnect %>" 

    SelectCommand="SELECT * FROM [Contact] WHERE ([CompanyName] = @CompanyName)" 
    DeleteCommand="DELETE FROM [Contact] WHERE [ContactID] = @ContactID" 
    InsertCommand="INSERT INTO [Contact] ([UserId], [UserSID], [LocationID], [IntranetUserName], [FirstName], [LastName], [CompanyName], [EmailAddress], [ContactPhone], [ContactPhoneExt], [ContactFAX], [DateUpdated], [ActiveMember], [UserLevelType]) VALUES (@UserId, @UserSID, @LocationID, @IntranetUserName, @FirstName, @LastName, @CompanyName, @EmailAddress, @ContactPhone, @ContactPhoneExt, @ContactFAX, @DateUpdated, @ActiveMember, @UserLevelType)" 
    UpdateCommand="UPDATE [Contact] SET [UserId] = @UserId, [UserSID] = @UserSID, [LocationID] = @LocationID, [IntranetUserName] = @IntranetUserName, [FirstName] = @FirstName, [LastName] = @LastName, [CompanyName] = @CompanyName, [EmailAddress] = @EmailAddress, [ContactPhone] = @ContactPhone, [ContactPhoneExt] = @ContactPhoneExt, [ContactFAX] = @ContactFAX, [DateUpdated] = @DateUpdated, [ActiveMember] = @ActiveMember, [UserLevelType] = @UserLevelType WHERE [ContactID] = @ContactID"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="memberCompanyNameLabel" Name="CompanyName" 
      PropertyName="Text" Type="String" /> 
    </SelectParameters> 
    <DeleteParameters> 
     <asp:Parameter Name="ContactID" Type="Int32" /> 
     <asp:Parameter Name="IntranetUserName" Type="String" /> 
    </DeleteParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="UserId" Type="Object" /> 
     <asp:Parameter Name="UserSID" Type="Int32" /> 
     <asp:Parameter Name="LocationID" Type="Int32" /> 
     <asp:Parameter Name="IntranetUserName" Type="String" /> 
     <asp:Parameter Name="FirstName" Type="String" /> 
     <asp:Parameter Name="LastName" Type="String" /> 
     <asp:Parameter Name="CompanyName" Type="String" /> 
     <asp:Parameter Name="EmailAddress" Type="String" /> 
     <asp:Parameter Name="ContactPhone" Type="String" /> 
     <asp:Parameter Name="ContactPhoneExt" Type="String" /> 
     <asp:Parameter Name="ContactFAX" Type="String" /> 
     <asp:Parameter Name="DateUpdated" Type="DateTime" /> 
     <asp:Parameter Name="ActiveMember" Type="Boolean" /> 
     <asp:Parameter Name="UserLevelType" Type="Int32" /> 
     <asp:Parameter Name="ContactID" Type="Int32" /> 
    </UpdateParameters> 
    <InsertParameters> 
     <asp:Parameter Name="UserId" Type="Object" /> 
     <asp:Parameter Name="UserSID" Type="Int32" /> 
     <asp:Parameter Name="LocationID" Type="Int32" /> 
     <asp:Parameter Name="IntranetUserName" Type="String" /> 
     <asp:Parameter Name="FirstName" Type="String" /> 
     <asp:Parameter Name="LastName" Type="String" /> 
     <asp:Parameter Name="CompanyName" Type="String" /> 
     <asp:Parameter Name="EmailAddress" Type="String" /> 
     <asp:Parameter Name="ContactPhone" Type="String" /> 
     <asp:Parameter Name="ContactPhoneExt" Type="String" /> 
     <asp:Parameter Name="ContactFAX" Type="String" /> 
     <asp:Parameter Name="DateUpdated" Type="DateTime" /> 
     <asp:Parameter Name="ActiveMember" Type="Boolean" /> 
     <asp:Parameter Name="UserLevelType" Type="Int32" /> 
    </InsertParameters> 
</asp:SqlDataSource> 

Répondre

1

Essayez d'utiliser l'événement RowDeleting à la place. PS: Je n'ai pas installé VS sur cette machine, donc je ne peux pas vraiment tester moi-même ... Désolé.

+0

Merci Johannes. J'obtiens une erreur que Membership.DeleteUser ne peut pas être une valeur null - donc je pense que RowDeleting n'obtient pas l'e.Value à temps avant qu'il ne soit supprimé par l'autre événement. Vous ne savez pas s'il existe d'autres moyens de capturer ce "IntranetUserName" avant de le supprimer. Merci pour toute autre suggestion que vous pourriez avoir. – Doug

+0

Je suppose que puisque son sur l'événement de suppression seulement "ContactID" sera canalisé au gestionnaire. – JohannesH

+1

Oui - Je pense que vous avez raison. J'ai résolu ceci en utilisant une vue de détails (une étape supplémentaire pour l'utilisateur final mais cela fonctionne maintenant). – Doug

Questions connexes