2008-11-18 Jonathan Pobst <monkey@jpobst.com>
authorJonathan Pobst <monkey@jpobst.com>
Tue, 18 Nov 2008 15:41:35 +0000 (15:41 -0000)
committerJonathan Pobst <monkey@jpobst.com>
Tue, 18 Nov 2008 15:41:35 +0000 (15:41 -0000)
* DataGridViewColumnCollection.cs: Make sure we re-index the columns after
the collection is modified.

2008-11-18  Jonathan Pobst  <monkey@jpobst.com>

* DataGridViewColumnCollectionTest.cs: Add test to ensure we re-index
columns after modifying the collection.

svn path=/trunk/mcs/; revision=119164

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridViewColumnCollection.cs
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/DataGridViewColumnCollectionTest.cs

index c5fa58a3d9660a8186eb92f1c14a13da55ae2fc4..2369659146ddcf34bd960492e66683ee9876ea47 100644 (file)
@@ -1,3 +1,8 @@
+2008-11-18  Jonathan Pobst  <monkey@jpobst.com>
+
+       * DataGridViewColumnCollection.cs: Make sure we re-index the columns after
+       the collection is modified.
+
 2008-11-17  Jonathan Pobst  <monkey@jpobst.com>
 
        * DomainUpDown.cs: Remove string cache and reflection optimizations.  They
index 77e1b7730145edff1c3bcdff7e1f21e5892af512..4022968f1f4bfa7e574c1e9c683c618a2ef21bab 100644 (file)
@@ -223,6 +223,7 @@ namespace System.Windows.Forms
 
                protected virtual void OnCollectionChanged (CollectionChangeEventArgs e)
                {
+                       RegenerateIndexes ();
                        RegenerateSortedList ();
                        
                        if (CollectionChanged != null)
@@ -237,6 +238,12 @@ namespace System.Windows.Forms
                        get { return display_index_sorted; }
                }
 
+               private void RegenerateIndexes ()
+               {
+                       for (int i = 0; i < Count; i++)
+                               this[i].SetIndex (i);
+               }
+               
                internal void RegenerateSortedList ()
                {
                        DataGridViewColumn[] array = (DataGridViewColumn[])base.List.ToArray (typeof (DataGridViewColumn));
index 38f07971adb952d2ec044419a2d7de0395961591..eeb9dfc2bddde0d2926961670179a881544ce273 100644 (file)
@@ -1,3 +1,8 @@
+2008-11-18  Jonathan Pobst  <monkey@jpobst.com>
+
+       * DataGridViewColumnCollectionTest.cs: Add test to ensure we re-index
+       columns after modifying the collection.
+
 2008-11-17  Jonathan Pobst  <monkey@jpobst.com>
 
        * DataGridViewTest.cs: Add a test showing how RowTemplate works.
index 43894797cf6f0995b916d48149652186a763b336..aaf87d7db1eb270293e50d570cc7dcff9226a822 100644 (file)
@@ -95,6 +95,38 @@ namespace MonoTests.System.Windows.Forms
                        Assert.AreEqual (100, col.Width, "#A col.Width");
                        
                }
+
+               [Test]
+               public void IndexUpdatedOnColumnCollectionChange ()
+               {
+                       DataGridView dgv = new DataGridView ();
+
+                       Form f = new Form ();
+                       f.Controls.Add (dgv);
+                       f.Show ();
+
+                       dgv.Columns.Add ("A1", "A1");
+                       Assert.AreEqual (0, dgv.Columns[0].Index, "A1");
+
+                       dgv.Columns.Add ("A2", "A2");
+                       Assert.AreEqual (0, dgv.Columns[0].Index, "A2");
+                       Assert.AreEqual (1, dgv.Columns[1].Index, "A3");
+
+                       dgv.Columns.Insert (0, new DataGridViewTextBoxColumn ());
+                       Assert.AreEqual (0, dgv.Columns[0].Index, "A4");
+                       Assert.AreEqual (1, dgv.Columns[1].Index, "A5");
+                       Assert.AreEqual (2, dgv.Columns[2].Index, "A6");
+
+                       dgv.Columns.RemoveAt (1);
+                       Assert.AreEqual (0, dgv.Columns[0].Index, "A7");
+                       Assert.AreEqual (1, dgv.Columns[1].Index, "A8");
+
+                       dgv.Columns.RemoveAt (0);
+                       Assert.AreEqual (0, dgv.Columns[0].Index, "A9");
+
+                       f.Close ();
+                       f.Dispose ();
+               }
        }
 }
 #endif
\ No newline at end of file