【问题标题】:How to delete a row in gridview after clicking the delete button in a form单击表单中的删除按钮后如何在gridview中删除一行
【发布时间】:2017-07-25 19:41:39
【问题描述】:

我有一个带有 3 个字段和一个按钮“更新”的网格视图的 aspx 页面。当我单击“更新”按钮时,我将被重定向到另一个 aspx 页面,该页面具有一个表单,其中包含有关通过单击“更新”按钮选择的网格视图中的条目的更多信息。该表单包含更多字段和一个“删除”按钮。当我单击“删除”按钮时,我需要关闭打开的表单并返回到 gridview 并删除该条目。我正在将 TemplateField 用于我的网格视图。

<asp:GridView ID="GridView1" runat="server">
   <Columns>
     <asp:TemplateField ShowHeader="False" HeaderText=" ">
          <ItemTemplate>
              <asp:Button ID="Btn_Update" Text="Update" runat="server" ButtonType="Button" CommandName="update" />
          </ItemTemplate>
      </asp:TemplateField>
        <asp:BoundField DataField="ID" HeaderText="ID" />
        <asp:BoundField DataField="FirstName" HeaderText="First Name" />
        <asp:BoundField DataField="LastName" HeaderText="Last Name"  />
    </Columns>
</asp:GridView>

这是我单击表单中的“删除”按钮关闭它并返回到gridview后的代码:

 protected void btn_Delete_Click(object sender, EventArgs e)
{

    #region Redirect to Page
    Page.ClientScript.RegisterStartupScript(this.GetType(), "RefreshParent", "<script language='javascript'>RefreshParent()</script>");
    Response.Write("<script>window.close();</" + "script>");
    #endregion

    ClearData();
}

单击表单中的“删除”按钮后,如何从网格视图中删除该行?谢谢大家

【问题讨论】:

  • 当您打开辅助窗口时,您知道您选择的行号吗?因此,当您关闭窗口时,您可以使用委托通知您的主窗口您单击了 DELETE 按钮,从而删除了该特定行。
  • 不,我没有实现该功能。我是否应该添加一些代码来获取行号并将其放入会话中,因为我将在不同的 aspx 页面中使用?
  • 是的,应该可以。
  • 好的。我会试试的。谢谢
  • 您可以在选择时获取行 ID,并将其作为查询字符串传递给详细信息页面。在关闭父窗口时,您将可以访问父窗口的 javascript 函数。这样您就可以从子窗口调用父窗口函数并关闭当前窗口。

标签: javascript c# asp.net webforms


【解决方案1】:

这里有一些示例代码,您就会明白这一点。它是 WPF + C#,而不是 Web,但你应该明白这一点。思路是一样的。

你的主程序:

public delegate void DeleteRow(bool doDelete);

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    int selectedRow = 0;
    public DeleteRow deleteRowDelegate;

    public void ReportDelete(bool delete)
    {
        // Delete the row here.
    }

    public MainWindow()
    {
        InitializeComponent();
        deleteRowDelegate += new DeleteRow(ReportDelete);
    }

    private void btnOK_Click(object sender, RoutedEventArgs e)
    {            
        // Here, get the row number to selectedRow.

        SecondaryWin win = new SecondaryWin(deleteRowDelegate);
        win.ShowDialog();

        // At this point, if DELETE was clicked in your secondary window, code would have executed ReportDelete() method.
    }
}

这将是您的辅助窗口:

public partial class SecondaryWin : Window
{
    DeleteRow callbackDel;

    public SecondaryWin(DeleteRow callback)
    {
        InitializeComponent();
        callbackDel = callback;
    }

    private void btnDel_Click(object sender, RoutedEventArgs e)
    {
        callbackDel.Invoke(true);
        // Close the window
    }
}

因此,在您的主窗口中,您将 ReportDelete() 方法注册到 DeleteRow 委托,然后将其传递到您的辅助窗口。我已经在构造函数中传递了它,但如果你愿意,你可以使用不同的方法。

然后在我的辅助窗口中,您可以在单击 DELETE 按钮时调用该委托,然后退出该窗口。

回到 Main(),只要在辅助窗口中单击 DELETE,它就会执行 ReportDelete() 方法中的代码,您可以在其中删除该特定行。为此目的使用 selectedRow。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多