2012-02-28 10 views
3

datagridviewをデータテーブルにバインドしました。列は自動生成されず、コードで作成されます。ユーザーの行を追加および削除できるようにするため、AllowUserToAddRows = true、AllowUserToDeleteRows = trueがあります。datagridviewで行を削除できない

問題は、行を選択してDelキーを押すと、情報が行セルのデフォルト値に置き換えられます。行は消えない。

この現象は何ですか(なぜ/何が起こっているのですか)、どうすれば回避できますか?

private void resetDowntimeGrid() 
    { 
     downtimeEntries = new DataTable(); 

     downtimeEntries.Columns.Add("Category", typeof(int)); 
     downtimeEntries.Columns.Add("HoursDown"); 
     downtimeEntries.Columns.Add("Reason"); 

     //deptDowntimeCategories.Select("", "ListOrder ASC"); 

     gridDowntime.Columns.Clear(); 

     DataGridViewComboBoxColumn cboCategory = new DataGridViewComboBoxColumn(); 
     { 
      cboCategory.HeaderText = "Category"; 
      cboCategory.DataSource = deptDowntimeCategories; 
      cboCategory.DisplayMember = "Name"; 
      cboCategory.ValueMember = "CategoryID"; 
      cboCategory.DataPropertyName = "Category"; 
      cboCategory.Width = Convert.ToInt16(gridDowntime.Width * 0.20); 
      cboCategory.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox; 
      cboCategory.AutoComplete = true; 

      gridDowntime.Columns.Add(cboCategory); 
     } 

     DataGridViewTextBoxColumn txtDowntime = new DataGridViewTextBoxColumn(); 
     txtDowntime.HeaderText = "HoursDown"; 
     txtDowntime.DataPropertyName = "HoursDown"; 
     txtDowntime.Width = Convert.ToInt16(gridDowntime.Width * 0.15); 
     gridDowntime.Columns.Add(txtDowntime); 

     DataGridViewTextBoxColumn txtReason = new DataGridViewTextBoxColumn(); 
     txtReason.HeaderText = "Reason"; 
     txtReason.DataPropertyName = "Reason"; 
     txtReason.Width = Convert.ToInt16(gridDowntime.Width * 0.60); 
     gridDowntime.Columns.Add(txtReason); 

     gridDowntime.DataSource = downtimeEntries; 

     lblStatus.Text = "Downtime grid reset."; 
    } 
+1

あなたはどのように作成している/データをバインディングを示すいくつかのコードを投稿できますか? –

+0

@BryanCrosby - 編集を参照してください。 – MAW74656

+0

行が「デフォルト値」に置き換えられたとはどういう意味ですか?私はあなたが提供したコードを試して、それは期待どおりに動作します。考えられるのは、行選択モードが予期しない動作をしているということです。私は完全な行を選択せず​​に行を削除すると混乱することが多いことがわかります。 –

答えて

4

をI空Winフォームを作成し、それにグリッドコードを置きます。違いは、私がDataGridView.EditModeをどのように設定したかです。私はそれを持っていた= EditOnEnterしかし、私はそれを設定すると完全に削除されます= EditOnKeystroke.

1

ここにあなたのコードの一部を使用して、私がやった迅速なサンプルだ、マイナスあなたの列の2:

は、ここに私のグリッドを作成するコードです。私はあなたの問題を再現できませんでした。実際に値を選択していることを確認し、ドロップダウンから値をクリックしてから、「削除」をクリックすることができます。 (ここで、Iは、単にフォームにツールボックスからDataGridViewをドラッグ。私は他の変更を行わない。)

public partial class Form1 : Form 
{ 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      DataTable myTable = new DataTable("MyTable"); 
      myTable.Columns.Add("CategoryID", typeof(int)); 
      myTable.Columns.Add("CategoryName", typeof(string)); 
      myTable.Rows.Add(new object[] { 1, "Small" }); 
      myTable.Rows.Add(new object[] { 2, "Medium" }); 
      myTable.Rows.Add(new object[] { 3, "Large" }); 

      DataGridViewComboBoxColumn cboCategory = new DataGridViewComboBoxColumn(); 
      cboCategory.HeaderText = "Category"; 
      cboCategory.DataSource = myTable; 
      cboCategory.DisplayMember = "CategoryName"; 
      cboCategory.ValueMember = "CategoryID"; 
      cboCategory.DataPropertyName = "Category"; 
      cboCategory.Width = Convert.ToInt16(dataGridView1.Width * 0.20); 
      cboCategory.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox; 
      cboCategory.AutoComplete = true; 

      dataGridView1.Columns.Add(cboCategory); 

     } 
} 
関連する問題