2009-08-15 11 views
1

私はsqlDataSourceを介して連絡先のリストを表示するGridviewを持っています。sqlDataSourceを使用してテーブルとASPNETメンバシッププロバイダからユーザーを削除する

JavaScriptを使用するようにOnClientClickが設定されたレコードを削除するためのItem Template(LinkBut​​ton)が含まれています: "return confirm( 'このユーザーを削除しますか?これにより、ユーザーはYesまたはCancelオプションを使用して少しポップアップします。

コンタクトテーブルからユーザーを削除すると、Membership.DeleteUser(UserName、true)ステートメントを使用してAspNetメンバシップテーブルで同じユーザーを削除する必要があります。

Contact.IntranetUserName列とメンバーシップテーブルのユーザー名は、同じデータ値が含まれているので、それは物事が便利になります。

私はGridviewのOnRowCommandを使い始めましたが、削除しようとしている行の「IntranetUserName」列の値を取得する方法はわかりません(Contact TableのItem Templateによって)、それをMembership.DeleteUserステートメントに渡します。

任意のC#のアイデアは、これが非常に高く評価されます。おそらく、代わりにGridViewのOnRowDeletedまたはOnRowDeletingを使用する必要がありますか?または、おそらくLinkBut​​tons OnCommand?

ここのGridViewとSqlDataSourceコントロール:

<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> 

答えて

1

ではなくRowDeletingイベントを使用してみてください。

void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    string name = e.Values["IntranetUserName"] as string; 
} 

PS:私は本当に申し訳ありませんが...それを自分自身をテスト傾けるようVSがこのマシンにインストールされていません。

+0

ありがとうございました。 Membership.DeleteUserはnull値ではないというエラーが出ています。そのため、RowDeletingは、他のイベントによって削除される前にe.Valueを取得していないと思います。削除する前に "IntranetUserName"をキャプチャする他の方法があるかどうかは不明です。 ありがとうございます。 – Doug

+0

私はそれが削除イベントのためだけに "ContactID"がハンドラに送られると思います。 – JohannesH

+1

はい - 私はあなたが正しいと思います。私は詳細ビューを使用してこれを解決しました(エンドユーザーのための追加ステップですが、現在は機能しています)。 – Doug

関連する問題