こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C# .NET DataGridView の行を追加するとデータが消える。

すぐ下に先ほど書いた質問がありますが、こちらに難点か追記してあります。下の質問は後ほど消します。(何でか、今現在消せないそうなので。)

環境 WindowsXP SP2
VisualStudio.NET 2005
C#

テストプログラムで、こんなコードを書きました。

private void button1_Click(object sender, EventArgs e)
{
int iMaxCnt;

dataGridView1.Rows.Add(1);
iMaxCnt = dataGridView1.RowCount ;

dataGridView1.EndEdit();

dataGridView1.Rows[iMaxCnt-1].Cells[0].Value = "たちつてと";
dataGridView1.Rows[iMaxCnt-1].Cells[1].Value = "なにぬめの";
dataGridView1.Rows[iMaxCnt-1].Cells[2].Value = "はひふへほ";

dataGridView1.EndEdit();

}

ボタンのクリックイベントなので、これを何度か実行すると、DataGridView の一番下の行だけにデータが表示されてしまいます。(以前のボタン押下時に記入されたデータが消えてしまい、データの変更が確定されていないように見えます。)
なぜなんでしょう?

投稿日時 - 2007-08-06 10:11:55

QNo.3231663

困ってます

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

よくわからず追加した
NotifyCurrentCellDirty

Updateは,なくても余裕で動くようだ(汗

投稿日時 - 2007-08-07 15:01:18

'再現した。(VB 2008 Beta2)
'なぜかはよく俺もわからん。すまん。

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim hoge As Integer = DataGridView1.RowCount
Me.DataGridView1.Rows.Add(1)

Me.DataGridView1.CurrentCell = Me.DataGridView1(0, hoge - 1)
Me.DataGridView1.CurrentCell.Value = hoge.ToString
Me.DataGridView1.CurrentCell = Me.DataGridView1(1, hoge - 1)
Me.DataGridView1.CurrentCell.Value = (hoge + 1).ToString

Me.DataGridView1.CurrentCell = Me.DataGridView1(2, hoge - 1)
Me.DataGridView1.CurrentCell.Value = (hoge + 2).ToString

DataGridView1.NotifyCurrentCellDirty(True)
DataGridView1.Update()

End Sub
End Class

'という感じでいちいちCurrentCellにしたら出来たんだけどな・・・
'習得目的でなければ回避策として頭に入れておいてもいいかも

投稿日時 - 2007-08-07 14:58:00