2016-05-29 24 views
-1

DataGridviewで行を選択すると、データベースから削除したいです。 私は2つの異なる方法を試しました。 この方法で私はいくつかの行だけを削除できます。DataGridとデータベースの選択行を削除しますか?

cmd.CommandText = "delete from dbo.Scenarist where [email protected]"; 
cmd.Parameters.Add(new SqlParameter("@idScenarist", dataGridScenarist.SelectedIndex)); 

私はSelectedRowsでも試してみましたが、私はこのエラーを持っている:

'System.Windows.Controls.DataGrid' does not contain a definition for 'SelectedRow' and no extension method 'SelectedRow' accepting a first argument of type 'System.Windows.Controls.DataGrid' could be found (are you missing a using directive or an assembly reference?)

は、WPFアプリケーションであり、私はDataGridView.Onlyデータグリッドを使用することはできません。 ありがとうございました!

答えて

0

ここでDataGridViewを使用します。これはDataGridViewRowのコレクションであるSelectedRowsへのアクセスを提供します。そのコレクションをループし、@idScenaristパラメータを対応するidを含む列の値で更新し、各ループでdeleteコマンドオブジェクトを実行します。

 cmd.CommandText = "delete from dbo.Scenarist where [email protected]"; 
     SqlParameter parm = new SqlParameter("@idScenarist", SqlDbType.Int); 
     cmd.Parameters.Add(parm); 

     foreach (DataGridViewRow row in dataGridScenarist.SelectedRows) 
     { 
      parm.Value = row.Cells["idScenarist"].Value; 
      cmd.ExecuteNonQuery(); 
     } 
+0

またはより良いまだ「で」構文を使用し、それを1つのコールを行います。ここでは

は、基本的な例です。 – ChrisF

+0

そのためには、各パラメータに対して文字列連結を行い、各値にパラメータオブジェクトを追加する必要があります。間違いなく実行可能で、アプリケーションに応じて、より良いアプローチかもしれません。私の好みは、あなたが不明な最大値を扱っているときにSQLクエリを動的に構築することから遠ざかることです。 – gmiley

+0

もしあなたがlinq 'var result = String.Join("、 "、rows.select(r => r.id.ToString()));)を使うなら、それは一回行うことができますが、削除セットのサイズ – ChrisF

関連する問題