2010-12-02 49 views
0

我有DataGridView有2列。 First的SortMode被设置为Automatic。当行被编辑时在DataGridView中异常排序

在这个网格是很多行,当我改变行的值,例如从xyz到abc我仍然在这个行的位置WAS。被编辑的行跳转到顶部。

我想中止这种自动排序,我希望通过左键单击列进行呼叫排序。是

我发现了一些解决方案(下面的代码+我设置SortMode编程),但我的行仍然跳跃:/有任何解决方案来解决这个问题?

private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     DataGridViewColumn newColumn = 
     dataGridView1.Columns[e.ColumnIndex]; 

     SortOrder direction; 
     if (dataGridView1.SortOrder == SortOrder.Ascending) 
     { 
      dataGridView1.Sort(newColumn, 
      ListSortDirection.Ascending); 
      direction = SortOrder.Ascending; 
     } 
     else 
     { 
      dataGridView1.Sort(newColumn, 
      ListSortDirection.Descending); 
      direction = SortOrder.Descending; 
     } 

     newColumn.HeaderCell.SortGlyphDirection = direction;  
    } 
} 

回答

0

为什么不在捕获DataGridView的编辑事件时禁用排序?

private void dataGridView1_CellBeginEdit(object sender, 
DataGridViewCellCancelEventArgs e) 
{ 
    foreach (DataGridViewColumn column in dataGridView1.Columns) 
     column.SortMode = DataGridViewColumnSortMode.NotSortable; 
} 

然后,你可以只是恢复这种行为(通过在列或任何上下文菜单项或其他的rightClick事件再次恢复它)恢复排序

+0

此解决方案不起作用。在开始时,我为每列不可排序。现在在dataGridView1_ColumnHeaderMouseClick在开始我添加:newColumn.SortMode = DataGridViewColumnSortMode.Programmatic; 。我已经添加了你的活动,但仍然一样。 – user278618 2010-12-05 23:38:03