none
Datagridviewで自動的に行を追加したい RRS feed

  • 質問

  • Datagridview の 最終行を編集すると自動的に行が追加される

    AllowUserToAddRowsをtrueにしています。

    UIから最終行を編集すると自動的に行が追加されますが

    コードからセルを編集すると挿入してくれません。

    ですので、コードに

    dataGridView1.Rows.Add();

    といれてみたところ

    最終行ではなく現在選択されているセルの上に行が挿入されて

    最終行に追加されません。

    最終行に行を追加するにはどうしたらよいのでしょうか?

    ご存知の方アドバイスして頂けましたら幸いです。

    よろしくお願いいたいます。

    2010年7月4日 6:27

すべての返信

  • 通常は、dataGridView1.Rows.Add();で最終行に追加されますので、どのようなコードを書かれているのでしょうか? 再現するコードをご提示いただけませんか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年7月4日 14:39
    モデレータ
  • trapemiyaさんご返答ありがとうございます。

    私も以前やったときは普通に最終行に追加されていたので

    新しく使い出したVS2010だとこうなのかな?などと思ってみたりしておりました。

    以下にコードを示します。

    foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
                {
                    cell.Value = new Bitmap("hoge.gif");
                    
                    dataGridView1.Rows.Add();
                    dataGridView1[0, cell.RowIndex + 1].Selected = true;
                }

    ------------------------------------------------------------------------------------

    //
                // dataGridView1
                //
                this.dataGridView1.AllowUserToResizeColumns = false;
                this.dataGridView1.AllowUserToResizeRows = false;
                this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
                this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
                this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
                this.Column1,
                this.Column2});
                this.dataGridView1.Location = new System.Drawing.Point(12, 71);
                this.dataGridView1.MultiSelect = false;
                this.dataGridView1.Name = "dataGridView1";
                this.dataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
                this.dataGridView1.RowTemplate.Height = 21;
                this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
                this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
                this.dataGridView1.Size = new System.Drawing.Size(250, 150);
                this.dataGridView1.TabIndex = 0;
                this.dataGridView1.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dataGridView1_RowPostPaint);
                //
                // Column1
                //
                this.Column1.HeaderText = "列1";
                this.Column1.Name = "Column1";
                this.Column1.Resizable = System.Windows.Forms.DataGridViewTriState.False;
                //
                // Column2
                //
                this.Column2.HeaderText = "列2";
                this.Column2.Name = "Column2";
                this.Column2.Resizable = System.Windows.Forms.DataGridViewTriState.False;

    ------------------------------------------------------------------------------------

    private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
            {
                // 行ヘッダのセル領域を、行番号を描画する長方形とする
                // (ただし右端に4ドットのすき間を空ける)
                Rectangle rect = new Rectangle(
                  e.RowBounds.Location.X,
                  e.RowBounds.Location.Y,
                  dataGridView1.RowHeadersWidth - 4,
                  e.RowBounds.Height);

                // 上記の長方形内に行番号を縦方向中央&右詰めで描画する
                // フォントや前景色は行ヘッダの既定値を使用する
                TextRenderer.DrawText(
                  e.Graphics,
                  (e.RowIndex + 1).ToString(),
                  dataGridView1.RowHeadersDefaultCellStyle.Font,
                  rect,
                  dataGridView1.RowHeadersDefaultCellStyle.ForeColor,
                  TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
            }

    • 編集済み 極小テック 2010年7月4日 17:13 イベント記入漏れ
    2010年7月4日 15:20