2

当用户从 GridView 中选择任何记录时,我的 DetailView 将根据 GridView 的选择进行更新。所以我想做的是,当我从 DetailView 中删除任何内容时,我想刷新 GridView,所以基本上我不想在 GridView 中显示已删除的记录。我试图通过在我的连接和 SQL 语句之后进行数据绑定来解决这个问题,但它不会刷新它。需要注意的一点是,我使用的是 Accordion 窗格,但我的 gridview 和 detailview 都在同一个窗格上。我不确定这是否会破坏任何东西。这是我的代码:

protected void Refresh_ItemCommand(object sender, DetailsViewCommandEventArgs e)
    {
        if (e.CommandName.Equals("Delete", StringComparison.CurrentCultureIgnoreCase))
        {

            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
            SqlDataAdapter da = new SqlDataAdapter("select ID, Name, Address from dbo.MyTable", con);
            DataTable dt = new DataTable();
            da.Fill(dt);
            Gridview1.DataSource = dt;
            Gridview1.DataBind();
        }

    }
4

3 回答 3

7

您可以使用名为“ItemDeleted”的数据视图的事件,如下所示:

  DetailViewName_ItemDeleted(object sender, 
    DetailsViewDeletedEventArgs e)
  {
    // Refresh the GridView control after a new record is updated 
    // in the DetailsView control.
    GridViewName.DataBind();
  }

以上代码来自MSDN官方网站,用于详细视图控制。

另一种方式(我更喜欢)是在Page_load过程中处理数据网格,因此当您在详细视图中按下删除按钮时,页面将执行回发。

因此,在该过程中,Page_load您可以调用另一个填充数据网格的过程。代码可能是这样的:

if (isPostback)
{
  FillGrid();    
} 

private void FillGrid()
{

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
            SqlDataAdapter da = new SqlDataAdapter("select ID, Name, Address from dbo.MyTable", con);
            DataTable dt = new DataTable();
            da.Fill(dt);
            Gridview1.DataSource = dt;
            Gridview1.DataBind();
}
于 2013-01-10T20:10:32.590 回答
1

您的代码没有显示实际删除记录的任何内容,因此可以理解的是,当您重新获取数据时仍然包含所有内容。

你需要做的是:

  1. 执行sql语句删除记录
  2. 重新获取数据
  3. 重新绑定数据。

如果您遵循这 3 个步骤,它将起作用。

于 2013-01-10T20:08:48.407 回答
0

尝试使用在按下 DGV 中的删除键时调用的事件

private void DGV_DeleteKeyPressed(object sender, KeyEventArgs e)
{
    //enter code here
}
于 2013-01-10T19:51:06.533 回答