Datagridview取消在填充列上拖放

Datagridview Cancel Drag and Drop on Filler Column

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

我在网格的末尾还有一列,其 AutoSizeMode 设置为填充,这用于填充网格,以便行看起来 "complete"

如何标记此列以仅禁用对此列的重新排序?

我试过类似下面的方法

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

这post How to get dragged column in datagridview when AllowUserToOrderColumns = true 有点建议

然而,在这个事件中尝试做我想做的事情会引发错误,因为您无法在正在调整的列上设置显示索引。

此致。

您可以使用 SynchronisationContextPost 方法。

在 C# 中,例如:

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 = ...,因为移动的列可以是另一列并移动到 TheFillerColumn 之后。