【问题标题】:Datagridview Cancel Drag and Drop on Filler ColumnDatagridview取消在填充列上的拖放
【发布时间】:2015-03-31 08:38:45
【问题描述】:

我有一个将 AllowUserToOrderColumns 属性设置为 true 的 datagridview。

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

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

我尝试过类似以下的方法

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 有点建议

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

问候。

【问题讨论】:

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


    【解决方案1】:

    您可以使用SynchronisationContext 的Post 方法。

    在 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 之后。

    【讨论】:

    • 一些修改和行为更符合我的预期。令人遗憾的是,拖动轮廓仍然出现,但我确信一旦用户尝试了几次并且它只是恢复到原始位置,他们就会明白这一点。 (他们可能甚至不会拖它,只是为了预防)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多