①Formに、DataGridView を1個設置しただけの状態で、下記のコードを実行します。
C#
1private void Form1_Shown(object sender, EventArgs e) 2{ 3 List<string> StringList1 = new List<string>(); 4 dataGridView1.DataSource = StringList1; 5 6 StringList1.Add("あいうえお"); 7 StringList1.Add("かきくけこ"); 8 9 dataGridView1.DataSource = StringList1; 10}
実行結果は下記です。
②2回目の DataSouce セット前に、null を割り当てると、項目は表示されますが、クリックすると、IndexOutOfRangeException が発生します。
C#
1private void Form1_Shown(object sender, EventArgs e) 2{ 3 List<string> StringList1 = new List<string>(); 4 dataGridView1.DataSource = StringList1; 5 6 StringList1.Add("あいうえお"); 7 StringList1.Add("かきくけこ"); 8 9 dataGridView1.DataSource = null; 10 dataGridView1.DataSource = StringList1; 11}
対処法として、List を BindingList に変更するか、再割り当て時に List を new する方法で対処していますが、そもそも症状発生の原因が分かりません。
ご存じの方がいらっしゃったら教えて頂けないでしょうか。
①対処法1:BindingListにする。
C#
1private void Form1_Shown(object sender, EventArgs e) 2{ 3 BindingList<string> StringList1 = new BindingList<string>(); 4 dataGridView1.DataSource = StringList1; 5 6 StringList1.Add("あいうえお"); 7 StringList1.Add("かきくけこ"); 8}
②対処法2:再割り当て時に new する。
C#
1private void Form1_Shown(object sender, EventArgs e) 2{ 3 List<string> StringList1 = new List<string>(); 4 dataGridView1.DataSource = StringList1; 5 6 StringList1.Add("あいうえお"); 7 StringList1.Add("かきくけこ"); 8 9 dataGridView1.DataSource = new List<string>(StringList1); 10}