2010-04-24 Ivan Zlatev <ivan@ivanz.com>
authorIvan Zlatev <ivan@ivanz.com>
Sat, 24 Apr 2010 21:57:46 +0000 (21:57 -0000)
committerIvan Zlatev <ivan@ivanz.com>
Sat, 24 Apr 2010 21:57:46 +0000 (21:57 -0000)
* DataGridViewColumnCollection.cs: When adding a column also
set the DisplayIndex if its now set by the user already.
        * DataGridViewColumnCollectionTest.cs: Add tests for bug #583387.
[Fixes bug #583387]

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

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridViewColumn.cs
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 eb9969ba4f2acc17124f0236114d3dbc3171b414..f6951cbe80b14a5740ef3bc990e6bb58ef1a41e5 100644 (file)
@@ -1,3 +1,9 @@
+2010-04-24  Ivan Zlatev  <ivan@ivanz.com>
+
+       * DataGridViewColumnCollection.cs: When adding a column also 
+       set the DisplayIndex if its now set by the user already.
+       [Fixes bug #583387]
+
 2010-04-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * NotifyIcon.cs: Make BalloonWindow expose the owner's Handle.
index b7b3295acbaebae2f78d81c64fe8be45eb9d3edd..159714b9e058ec8deba1e39373de1f3a036157e3 100644 (file)
@@ -184,6 +184,11 @@ namespace System.Windows.Forms {
                        }
                }
 
+               internal int DisplayIndexInternal {
+                       get { return DisplayIndex; }
+                       set { displayIndex = value; }
+               }
+
                internal int DataColumnIndex {
                        get { return dataColumnIndex; }
                        set { dataColumnIndex = value; }
index cf5b7929c2706739e5fe1af41425f84aa0f3a146..29bc09dd61e6b10435045430b548972cc9ee85b7 100644 (file)
@@ -78,6 +78,8 @@ namespace System.Windows.Forms
                public virtual int Add (DataGridViewColumn dataGridViewColumn)
                {
                        int result = base.List.Add(dataGridViewColumn);
+                       if (dataGridViewColumn.DisplayIndex == -1)
+                               dataGridViewColumn.DisplayIndexInternal = result;
                        dataGridViewColumn.SetIndex(result);
                        dataGridViewColumn.SetDataGridView(dataGridView);
                        OnCollectionChanged(new CollectionChangeEventArgs(CollectionChangeAction.Add, dataGridViewColumn));
@@ -188,6 +190,8 @@ namespace System.Windows.Forms
                public virtual void Insert (int columnIndex, DataGridViewColumn dataGridViewColumn)
                {
                        base.List.Insert (columnIndex, dataGridViewColumn);
+                       if (dataGridViewColumn.DisplayIndex == -1)
+                               dataGridViewColumn.DisplayIndexInternal = columnIndex;
                        dataGridViewColumn.SetIndex (columnIndex);
                        dataGridViewColumn.SetDataGridView (dataGridView);
                        OnCollectionChanged (new CollectionChangeEventArgs (CollectionChangeAction.Add, dataGridViewColumn));
@@ -253,9 +257,8 @@ namespace System.Windows.Forms
                        List<DataGridViewColumn> result = new List<DataGridViewColumn> (array);
 
                        result.Sort (new ColumnDisplayIndexComparator ());
-                       
                        for (int i = 0; i < result.Count; i++)
-                               result[i].DisplayIndex = i;
+                               result[i].DisplayIndexInternal = i;
                        
                        display_index_sorted = result;
                }
@@ -271,7 +274,12 @@ namespace System.Windows.Forms
                {
                        public int Compare (DataGridViewColumn o1, DataGridViewColumn o2)
                        {
-                               return o1.DisplayIndex - o2.DisplayIndex;
+                               if (o1.DisplayIndex == o2.DisplayIndex)
+                                       // Here we avoid the equal value swapping that both Array.Sort and ArrayList.Sort 
+                                       // do occasionally and preserve the user column insertation order.
+                                       return 1;
+                               else
+                                       return o1.DisplayIndex - o2.DisplayIndex;
                        }
                }
        }
index cc55312b00e75d9bc2ac2b21f653d92bc6841b7e..6dc092ebe8350c409b31627f72d92fe2f1818954 100644 (file)
@@ -1,3 +1,7 @@
+2010-04-24  Ivan Zlatev  <ivan@ivanz.com>
+
+       * DataGridViewColumnCollectionTest.cs: Add tests for bug #583387.
+
 2010-04-17  Carlos Alberto Cortez <calberto.cortez@gmail.com>
 
        * TreeViewTest.cs: New test for Sorted and BeginUpdate interaction.
index aaf87d7db1eb270293e50d570cc7dcff9226a822..e239b5d76780bb58cc275ba7cbe27d19487b6820 100644 (file)
@@ -107,22 +107,31 @@ namespace MonoTests.System.Windows.Forms
 
                        dgv.Columns.Add ("A1", "A1");
                        Assert.AreEqual (0, dgv.Columns[0].Index, "A1");
+                       Assert.AreEqual (0, dgv.Columns[0].DisplayIndex, "B1");
 
                        dgv.Columns.Add ("A2", "A2");
                        Assert.AreEqual (0, dgv.Columns[0].Index, "A2");
+                       Assert.AreEqual (0, dgv.Columns[0].DisplayIndex, "B2");
                        Assert.AreEqual (1, dgv.Columns[1].Index, "A3");
+                       Assert.AreEqual (1, dgv.Columns[1].DisplayIndex, "B3");
 
                        dgv.Columns.Insert (0, new DataGridViewTextBoxColumn ());
                        Assert.AreEqual (0, dgv.Columns[0].Index, "A4");
+                       Assert.AreEqual (0, dgv.Columns[0].DisplayIndex, "B4");
                        Assert.AreEqual (1, dgv.Columns[1].Index, "A5");
+                       Assert.AreEqual (1, dgv.Columns[1].DisplayIndex, "B5");
                        Assert.AreEqual (2, dgv.Columns[2].Index, "A6");
+                       Assert.AreEqual (2, dgv.Columns[2].DisplayIndex, "B6");
 
                        dgv.Columns.RemoveAt (1);
                        Assert.AreEqual (0, dgv.Columns[0].Index, "A7");
+                       Assert.AreEqual (0, dgv.Columns[0].DisplayIndex, "B7");
                        Assert.AreEqual (1, dgv.Columns[1].Index, "A8");
+                       Assert.AreEqual (1, dgv.Columns[1].DisplayIndex, "B8");
 
                        dgv.Columns.RemoveAt (0);
                        Assert.AreEqual (0, dgv.Columns[0].Index, "A9");
+                       Assert.AreEqual (0, dgv.Columns[0].DisplayIndex, "B9");
 
                        f.Close ();
                        f.Dispose ();