4

「JobPost.mdf」に「UserDetail」テーブルがあります。主キー「UserName」を持つ「UserDetail」テーブルの列を表示する「Gridview1」があります。この「UserName」は元々、Membershipクラス関数を使用して保存されています。次に、GridView1に「削除」リンクボタンを追加します。この「削除」は自動生成ボタンではありません。ToolBoxから列itemtemplate内にドラッグしました。GridView1の列は、「Delete_LinkBut​​ton」+「UserName」(UserDetailテーブル内)+「City」(UserDetailテーブル内)+「IsAdmin」(UserDetailテーブル内)になります。

必要なのは、この「delete_linkBut​​ton」をクリックすると、「UserDetail」テーブルから同じ行(対応する「UserName」によるリンク)のユーザーエンティティ全体のみが削除され、AspNetDBからすべての情報が削除されることです。 mdf(User、Membership、UserInRoleなど)。

ユーザー確認を起動したいのですが、必須ではありません。少なくとも私はそれを正しい方法で機能させようとしています。

for example:

Command     UserName    City           IsAdmin
delete           ken       Los Angles          TRUE
delete           jim        Toronto        FALSE

最初の行の「削除」をクリックすると、「UserDetail」テーブル内の「ken」に関するすべてのレコードを削除する必要があります。その間、UserinRoleテーブルを含め、AspNetDB.mdfの「ken」に関するすべてのレコードが失われます。

私はasp.netを初めて使用するため、「Delete_LinkBut​​ton」のコマンド引数を分離コードファイルLinkBut​​ton1_Click(object sender、EventArgs e)に渡す方法がわかりません。これは、追加のパラメーター「UserName」が1つ必要なためです。

私の部分的なコードは以下のとおりです。

<asp:TemplateField>
                 <ItemTemplate>
                     <asp:LinkButton ID="Delete_LinkButton" runat="server" onclick="LinkButton1_Click1" CommandArgument='<%# Eval("UserName","{0}") %>'>LinkButton</asp:LinkButton>
                 </ItemTemplate>
             </asp:TemplateField>


protected void Delete_LinkButton_Click(object sender, EventArgs e)
     {
      ((LinkButton) GridView1.FindControl("Delete_LinkButton")).Attributes.Add("onclick", "'return confirm('Are you sure you want to delete {0} '" + UserName);
      Membership.DeleteUser(UserName);
      JobPostDataContext db = new JobPostDataContext();
      var query = from u in db.UserDetails
                   where u.UserName == UserName
                   select u;
         for (var Item in query)
         {
              db.UserDetails.DeleteOnSubmit(Item);
         }
      db.SubmitChanges();


     }

助けてください!

4

1 に答える 1

1

確認のために、スクリプトをOnClientClickLinkBut​​ton のプロパティに追加する必要があります。

<asp:LinkButton 
    ID="Delete_LinkButton" 
    runat="server" 
    onclick="LinkButton1_Click1" 
    CommandArgument='<%# Eval("UserName","{0}") %>'
    OnClientClick='if (!confirm("Are you sure you want to delete <%# Eval("UserName","{0}") %>?")) return false;'
>
    LinkButton
</asp:LinkButton>

そのボタンのイベント ハンドラーは次のようになります。

protected void Delete_LinkButton_Click(object sender, EventArgs e)
{
    string userName = ((LinkButton)sender).CommandArgument.ToString();

    Membership.DeleteUser(UserName);
    JobPostDataContext db = new JobPostDataContext();

     foreach (var item in db.UserDetails.Where(u => u.UserName == userName))
          db.UserDetails.DeleteOnSubmit(Item);

    db.SubmitChanges();
}

このOnClientClickプロパティは、rendered<a/>タグの onclick プロパティの先頭に、記述した JavaScript を追加します。そのため、ユーザーが削除を確認しない場合、false が返され、何も行われません。それ以外の場合は、ポストバックして削除します。

イベント ハンドラーでは、sender常にイベントを発生させたコントロールです。この場合、LinkButton. したがって、これを にキャストして、ty があるLinkButtonそのCommandArgumentプロパティを取得できますUserName

于 2011-08-26T13:24:16.277 に答える