2017-12-29 49 views
0

DBからデータを永久に削除するために各行の表示削除ボタンがありますが、どのようにしてDBからデータを削除できますか?ボタンを各行で使用してDataGridViewから行を削除

次のコードは、各行の削除ボタンを示しています。私はユーザーがOracleデータベースを持っています 私は削除のための書き込みクエリがありますか?

DataGridViewLinkColumn Deletelink = new DataGridViewLinkColumn(); 
Deletelink.UseColumnTextForLinkValue = true; 
Deletelink.HeaderText = "delete"; 
Deletelink.DataPropertyName = "lnkColumn"; 
Deletelink.LinkBehavior = LinkBehavior.SystemDefault; 
Deletelink.Text = "Delete"; 
dataGridView1.Columns.Add(Deletelink); 

私は削除のためのコードを記述しているが、私は

private void dataGridView1_CellContentClick(object sender DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex == 5) 
    { 
    empid = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["empid"].Value); 
    OleDbDataAdapter adp = new OleDbDataAdapter("delete from apps where appsid= '"+empid+"'", con); 
    DataTable dt = new DataTable(); 
    adp.Fill(dt); 
    dataGridView1.DataSource = dt; 
    dataGridView1.Refresh(); 
+0

セットアップについて十分な情報がありません。データベースの行を削除する場合は、IDまたはKeyが必要になります。 – LarsTech

+0

私はグリッドインデックス – khan

+0

_dataGridView2_または_dataGridView1_を使用して解決しようとしている質問を編集していますか?なぜあなたはdataGridView2のデータソースとしてdatatableを設定していますか? – Steve

答えて

0

に失敗しているOleDbDataAdapterおよのコンストラクタとして発行deleteコマンドが正しくありません。ただし、アダプタはそれにもかかわらずコマンドを実行します。しかし、確かにあなたはデータコマンドを満たすのにdeleteコマンドを使うことは期待できません。
まだSELECTが必要です。

通常、これは(が、その後、を削除し、データベースへの変更を保存したい場合、あなたはorginalのDataAdapterと、当初に使用された元のDataTableを使用する必要があり、これは根本的な行をマークし、グリッドから行を削除して行われますこれがうまくUsing OleDbDataAdapter to Update a DataTable

ここで説明されてUpdate method

を発行するグリッドを埋めるか、またはあなた自身が別のコマンドを使用して更新を行うことができ、データテーブル

// Delete the record on the db 
empid = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["empid"].Value); 
OleDbCommand cmd = new OleDbCommand("delete from apps where appsid= @id", con); 
cmd.Parameters.Add("@id", OleDbType.VarWChar).Value = empid; 
cmd.ExecuteNonQuery(); 

// reload the grid with the updated info from the db 
OleDbDataAdapter da = new OleDbDataAdapter("Select * from apps", con); 
DataTable dt = new DataTable(); 
da.Fill(dt); 
dataGridView1.DataSource = dt; 
dataGridView1.Refresh(); 
をリロード

これはもちろん、データベースを2回ヒットし、行を削除するたびにすべてを再ロードするという欠点があります。

+0

私は@ idを使用して行の削除文字列変数としてempidを使用していますか? – khan

+0

これは値がempidの値である 'name'パラメータです – Steve

関連する問題