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
有点建议
然而,在这个事件中尝试做我想做的事情会引发错误,因为您无法在正在调整的列上设置显示索引。
此致。
您可以使用 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
之后。
我有一个 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 有点建议
然而,在这个事件中尝试做我想做的事情会引发错误,因为您无法在正在调整的列上设置显示索引。
此致。
您可以使用 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
之后。