【问题标题】:GridView not refreshing after Delete event删除事件后GridView不刷新
【发布时间】:2012-10-29 06:05:05
【问题描述】:

我在使用 asp.net GridView 时遇到了一个奇怪的问题。我有绑定到LinqDataSourceGridView。在GridView 的行删除事件中,我正在从数据库中删除行,但网格没有刷新(即使在绑定到数据源之后)。

当我设置断点时,我可以看到OnRowDeleting 事件在LinqDS_Selecting 事件之后被触发。但是在删除事件之后它没有再次被触发!这可能是原因吗?我做错了什么?

有人可以帮忙吗?非常感谢。

.aspx 文件:

<asp:LinqDataSource
    ID="LinqDS"
    runat="server"
    OnSelecting="LinqDS_Selecting">
</asp:LinqDataSource>

<asp:GridView
    DataSourceID = "LinqDS"
    ID = "gv1"
    runat = "server"  
    DataKeyNames = "InstructionId"
    EnableViewState = "false"
    OnRowDataBound = "gv1_RowDataBound" 
    OnRowDeleting = "gv1_RowDeleting" 
    OnRowCommand = "gv1_RowCommand"
    PageSize = "30" >
    <Columns>
        <!-- My colums --->
    </Columns>
</asp:GridView>

.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{

}

protected void LinqDS_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    // my linq to sql query
    var query = from  .... .... ;
    e.Result = query;
}

protected void gv1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int instructionId = (int)gv1.DataKeys[e.RowIndex].Value;
    /// my delete logic
    CTX.SubmitChanges();
    gv1.DataBind();
}

【问题讨论】:

  • gv1_RowDeleting 被解雇了吗?如果是,也许您还需要制作LinqDS.DataBind()
  • gv1_RowDeleting 事件是否触发,您尝试删除的值是否已从数据库中实际删除?

标签: asp.net linq-to-sql gridview refresh


【解决方案1】:

尝试在 GridView 的 ItemDeleting 方法上将 GridView 的 EditIndex 设置为 -1:

protected void gv1_RowDeleting(object sender, GridViewDeleteEventArgs e) {
    gv1.EditIndex = -1;
    gv1.DataBind();
}

并将删除逻辑移至 GridView 的 RowCommand 方法:

protected void gv1_RowCommand(object sender, GridViewDeleteEventArgs e) {
    If (e.CommandName == "Delete") {
        int instructionId = (int) gv1.DataKeys[e.RowIndex].Value;
        /// my delete logic
        CTX.SubmitChanges();
    }
}

您对删除操作的控制应该类似于:

<asp:LinkButton ID="lbDel" runat="server" Text="Delete" CommandName="Delete" />

【讨论】:

    【解决方案2】:

    如果您的记录实际上被正确删除并且网格只是没有显示更改,我会尝试将 GridView 放在 UpdatePanel 中,看看是否有帮助。

    <asp:UpdatePanel runat="server" UpdateMode="Always">
        <ContentTemplate>
            // GridView
        </ContentTemplate>
    </asp:UpdatePanel>
    

    【讨论】:

      【解决方案3】:

      我无法指出您代码中的错误,但我给您的是我删除数据时所做的代码。

      <asp:GridView ID="GridView1" runat="server" OnRowDeleting="Del" DataKeyNames="Clg_ID" BackColor="#DEBA84" 
                      BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
                      CellSpacing="2">
                      <Columns>
                          <asp:CommandField ShowDeleteButton="True" />
                      </Columns>
                      <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
                      <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
                      <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
                      <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
                      <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
                      <SortedAscendingCellStyle BackColor="#FFF1D4" />
                      <SortedAscendingHeaderStyle BackColor="#B95C30" />
                      <SortedDescendingCellStyle BackColor="#F1E5CE" />
                      <SortedDescendingHeaderStyle BackColor="#93451F" />
                  </asp:GridView>
      

      .cs 文件

      protected void Del(object sender, GridViewDeleteEventArgs e)
          {
              string i = GridView1.DataKeys[0].Value.ToString();
              SqlConnection cn = new SqlConnection();
              cn.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString.ToString();
              cn.Open();
              SqlCommand cmd = new SqlCommand("Delete from Feedback where Clg_ID='" + i + "'", cn);
              cmd.ExecuteNonQuery();
              cmd.Dispose();
              cn.Close();
              Response.Redirect("MFeedback.aspx");
          }
      

      【讨论】:

        猜你喜欢
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多