2016-09-26 15 views
0

「レビュー担当者」のロールを持つユーザーを表示するために、ページに以下のgridviewがあります。グリッドはレコードを正しくプルアップします。グリッドビューには、レビュー担当者の役割を削除するための「削除」ボタンがあります。手動で実行したときに呼び出されるストアドプロシージャは正常に動作していますが、エラーが返されず、レコードも削除されないため、aspxまたはcodebehindページで何かが見つからないようです。 GridViewのためASP.NETアプリケーションのgridviewからレコードを削除する

ASPXコントロール:後ろの完全なコードで更新

<asp:GridView ID="GridView1" runat="server" Caption="Current Reviewers" AllowSorting="True" PagerSettings-Mode="NumericFirstLast" OnPageIndexChanging="GridView1_PageIndexChanging" 
CaptionAlign="Top" EmptyDataText="No Reviewers Configured." PageSize="10" AllowPaging="true" PagerStyle-HorizontalAlign="Center" PagerStyle-Font-Size="Large" 
AutoGenerateColumns="false" AlternatingRowStyle-BackColor="#cccccc" DataKeyNames="UserId" OnRowDeleting="DeleteRecord"> 
<Columns> 

    <asp:BoundField DataField="UserId" HeaderText="Id" ItemStyle-Width="300" /> 
    <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="250" /> 
    <asp:TemplateField HeaderText="Delete?"> 
        <ItemTemplate> 
         <span onclick="return confirm('Are you sure to Delete the record?')"> 
          <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandArgument='<%# Eval("UserId") %>' CommandName="DeleteRecord"></asp:LinkButton> 
         </span> 
        </ItemTemplate> 
       </asp:TemplateField> 
</Columns> 

</asp:GridView> 

namespace cs1.Admin 
{ 
public partial class ReviewerMaintenance : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      BindDropDownList1(); 
     } 
    } 
    private void BindDropDownList1() 
    { 

     string connectionString = WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
     string selectSQL = String.Format("SELECT Id as UserId, FirstName + ' ' + LastName As Name from AspNetUsers where Id in(SELECT UserId from AspNetUserRoles where RoleId = 1)"); 
     SqlConnection con = new SqlConnection(connectionString); 
     SqlCommand cmd = new SqlCommand(selectSQL, con); 
     SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 

     adapter.Fill(ds, "Reviewer"); 

     GridView1.DataSource = ds; 
     GridView1.DataBind(); 
    } 
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     GridView1.PageIndex = e.NewPageIndex; 
     BindDropDownList1(); //bindgridview will get the data source and bind it again 
    } 

    protected void DeleteRecord(object sender, GridViewDeleteEventArgs e) 
    { 
     string UserId = GridView1.DataKeys[e.RowIndex].Value.ToString(); 
     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()); 
     SqlCommand dCmd = new SqlCommand(); 
     { 
      conn.Open(); 
      dCmd.CommandText = "Reviewer_Delete"; 
      dCmd.CommandType = CommandType.StoredProcedure; 
      dCmd.Parameters.Add("@UserId", SqlDbType.NVarChar).Value = UserId; 
      dCmd.Connection = conn; 
      dCmd.ExecuteNonQuery(); 
      // Refresh the data 

      BindDropDownList1(); 
      dCmd.Dispose(); 
      conn.Close(); 
      conn.Dispose(); 

     } 

    } 


} 
} 
+1

あなたの 'DeleteRecord'メソッドにブレークポイントを置くとヒットしますか?メソッドへのバインディングに使用している構文が正しいかどうかわかりません。 – TZHX

+1

作成したストアドプロシージャが表示されますか? – Auguste

+0

@TZHX - 私はブレークポイントを入れようとしましたが、コードは停止し、期待どおりに続けるように言われるのを待っています。 –

答えて

0

がこれを処理するためのGridViewのOnRowCommandイベントを使用してみてください。あなたのGridViewのマークアップで

OnRowCommand="GridView1_RowCommand"が存在していることを確認。背後にあるあなたのコードで

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { /* Set a breakpoint here and make sure: 
      A.) You are hitting this method 
      B.) Get value of e.CommandName */ 
     if (e.CommandName == "EditRecord") 
     { 
      // Run your edit/update logic here if needed 
     } 
     if (e.CommandName == "DeleteRecord") 
     { 
      // Delete the record here 
      string UserId = GridView1.DataKeys[e.RowIndex].Value.ToString(); 
      SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()); 
      SqlCommand dCmd = new SqlCommand(); 
      { 
       conn.Open(); 
       dCmd.CommandText = "Reviewer_Delete"; 
       dCmd.CommandType = CommandType.StoredProcedure; 
       dCmd.Parameters.Add("@UserId", SqlDbType.NVarChar).Value = UserId; 
       dCmd.Connection = conn; 
       dCmd.ExecuteNonQuery(); 
       // Refresh the data 

       BindDropDownList1(); 
       dCmd.Dispose(); 
       conn.Close(); 
       conn.Dispose(); 
     } 
    } 
+0

=上記の結果をエラーで追加しています: 'admin_reviewermaintenance_aspx'には 'GridView1_RowCommand'の定義が含まれておらず、 'GridView1_RowCommand' (使用しているディレクティブまたはアセンブリ参照がありませんか?) –

0

は、これは非常に単純なことになってしまいました。 aspxページで、私はOnRowDeletingとCommandNameの両方の要素を "DeleteRecord"と同じ値に設定しました。

CommandNameの値を「削除」に変更すると、コードを評価してストアドプロシージャを正常に呼び出すことができました。

関連する問題