2

ユーザーが GridView から任意のレコードを選択すると、GridView の選択に基づいて DetailView が更新されます。だから私がやろうとしているのは、DetailViewから何かを削除すると、GridViewをリフレッシュしたいので、基本的にGridViewに削除されたレコードを表示したくないということです。接続と SQL ステートメントの後にデータ バインドを実行して、この問題を解決しようとしましたが、更新されません。注意すべきことの 1 つは、アコーディオン ペインを使用しているが、グリッドビューと詳細ビューの両方が同じペインにあることです。これが何かを壊しているかどうかはわかりません。これが私のコードです:

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 サイトからのものです。

もう 1 つの方法 (私が好む方法) は、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からDeleteキーを押した場合に呼び出されるイベントを使用してみてください

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