2016-09-26 68 views
0

我在頁面上有下面的gridview來顯示角色爲「審閱者」的用戶。網格正確地提取記錄。在gridview上是一個「刪除」按鈕來刪除審閱者角色。被調用的存儲過程在手動運行時工作正常,但我似乎缺少aspx或代碼隱藏頁面上的某些內容,因爲沒有錯誤返回,也沒有記錄被刪除。在ASP.NET應用程序中從gridview中刪除記錄

的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

嘗試使用OnRowCommand事件在GridView的處理這個問題。

在你的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'的定義,也沒有接受類型爲'admin_reviewermaintenance_aspx'的第一個參數的擴展方法'GridView1_RowCommand'可以找到(你是否缺少使用指令或程序集引用?) –

0

這最終是一個非常簡單的事情。在aspx頁面上,我將OnRowDeleting和CommandName元素都設置爲相同的「DeleteRecord」值。

將CommandName值更改爲「Delete」允許評估代碼併成功調用存儲過程。

相關問題