+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.
}
}
+ internal int DisplayIndexInternal {
+ get { return DisplayIndex; }
+ set { displayIndex = value; }
+ }
+
internal int DataColumnIndex {
get { return dataColumnIndex; }
set { dataColumnIndex = value; }
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));
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));
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;
}
{
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;
}
}
}
+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.
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 ();