Datagridview取消拖放列上的拖放

时间:2015-03-31 08:38:46

标签: vb.net datagridview drag-and-drop

我有一个数据网格视图,其AllowUserToOrderColumns属性设置为true。

我还在网格末尾有一个列,其中AutoSizeMode设置为fill,这用于填充网格以使行看起来“完整”

如何将此列标记为仅禁用此列的重新排序?

我尝试了类似下面的内容

Private Sub dgvAdjustments_ColumnDisplayIndexChanged(sender As Object, e As DataGridViewColumnEventArgs) Handles dgvAdjustments.ColumnDisplayIndexChanged
    If e.Column Is TheFillerColumn Then
        e.Column.DisplayIndex = theGrid.Columns.Count - 1
    End If
End Sub

这篇文章How to get dragged column in datagridview when AllowUserToOrderColumns = true 建议

但是,在此事件中尝试执行我想要执行的操作会抛出错误,因为您无法在正在调整的列上设置显示索引。

问候。

1 个答案:

答案 0 :(得分:1)

您可以使用SynchronisationContext的{​​{1}}方法。

在C#中,您将拥有例如:

Post

另外,请不要private void dataGridView1_ColumnDisplayIndexChanged(object sender, DataGridViewColumnEventArgs e) { SynchronizationContext.Current.Post(delegate(object o) { if (Column1.DisplayIndex != 1) Column1.DisplayIndex = 1; }, null); } 而是e.Column.DisplayIndex = ...,因为移动的列可以是另一个,并在TheFillerColumn.DisplayIndex = ...之后移动。