none
DataGridViewで続けて何度でも行削除を繰り返すことを可能とする方法? RRS feed

  • 質問

  • 行を選択して右クリックしたとき行削除を実行するコードを下のようにかいてみました。
    しかしこれには欠陥がありまして,行削除を実行したあとで「これも削除しよう」ということができない,つまり
    「行削除が一回だけしか実行できない」
    のです。
    
    改善策を教えていただけないでしょうか?
    
    private void 行削除ToolStripMenuItem_Click(object sender, EventArgs e)
    {
      //削除するかどうか
      DialogResult dlgRet;
      dlgRet = MessageBox.Show("削除しますか?", "選択行削除",
        MessageBoxButtons.YesNo, MessageBoxIcon.Question);
      switch (dlgRet)
      {
        case DialogResult.Yes:
          //選択されているすべての行を削除する
          DataGridView dgv = (DataGridView)genkinDataGridView;
          int del = 0;
          foreach (DataGridViewRow r in dgv.SelectedRows)
          {
            if (!r.IsNewRow)
            {
              dgv.Rows.Remove(r);
              del++;
            }
          }
    
          //this.Validate();
          this.genkinBindingSource.EndEdit();
          this.genkinTableAdapter.Update(this.suitoDataSet3.genkin);
    
          //削除結果
          MessageBox.Show(del.ToString()
            + " 行のデータを\n削除しました。", "削除結果");
    
          suitoDataSet3.Clear();
          this.genkinTableAdapter.Fill(this.suitoDataSet3.genkin);
          break;
        case DialogResult.No:
          break;
      }
      //削除後のgenkinDataGridViewの幅と高さ
      dgvWidthHeight();
      //最終行に移動
      int iRow = genkinDataGridView.RowCount - 1;
      genkinDataGridView.CurrentCell = genkinDataGridView[1, iRow];
      //再集計
      reCalc(0, iRow, genkinDataGridView );
    }
    

     

     

     

    2010年9月2日 22:01

回答

  • すみません。解決しました。末尾に

    //-- 行ヘッダにContextMenuStrip1を関連付け  
                foreach (DataGridViewRow row in genkinDataGridView.Rows)
                {
                    row.HeaderCell.ContextMenuStrip = contextMenuStrip1;
                }

    を追加すればいいだけでした。

    • 回答としてマーク Koyan 2010年9月2日 22:15
    2010年9月2日 22:15