2016-05-04 18 views
0

このコードで唯一の問題は、同じIdがある場合、それも同様に削除され、実際にはDataGridviewで選択した行が削除されないということです。データベース内のdatagridviewで選択した行を削除するにはどうすればよいですか?

 private void Delete_Button_Click(object sender, EventArgs e) 
    { 

     if (dataGridView1.SelectedRows.Count > 0) 
     { 
      int Index = dataGridView1.CurrentCell.RowIndex; 
      if (MessageBox.Show("Are you sure?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
      { 
       string delete = dataGridView1.Rows[Index].Cells[0].Value.ToString(); 
       SqlCeCommand cmd = new SqlCeCommand("delete from Contact_List where Id "+ delete + "'", con); 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Information Deleted....."); 
       filldata(); 
      } 
     } 
     else 
     { 
      MessageBox.Show("Please Select a Row"); 
     } 
     con.Close(); 
    } 

誰でも手伝ってもらえますか?このコードでは、選択した行だけでなく、データベースも削除されます。

ありがとうございます!悪い英語をお詫びします。

+0

プライマリキーはありませんか?レコードを一意に識別するには、主キーの形式が必要です。そうしないと、特定のレコードを削除するようにDBに指示する方法はありません。 –

+0

''と同じIDがあるとき '' - 今何しますか? *複数のレコードに同じ識別子*がある場合は、どのようにしてそれらを個別に識別できますか? – David

+0

備考:qureyは有効ではありません: '" Contact_Listからの削除です。ここで、Id = '"+ deleteIndex +"' "'; = 'を追加し、別の変数名を使用して(deleteIndexのように)優先的に削除する必要があります。 –

答えて

0

まず、パラメータ化されたクエリを使用します。第2に、グリッドビューにキーフィールドを置くか(たとえそれを隠しコラムに入れても)、または削除ステートメントを再作成して、必要な行だけを削除するのに十分な列を含める必要があります。また、グリッドビューで選択した行の値に基づいてテーブルの一意の行を判断できない場合、基本的には不運です。

関連する問題