Как отключить переупорядочение указанного c (последнего) столбца DataGrid? - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть сетка данных в моем приложении, где мне нужно сделать так, чтобы последний столбец сетки данных всегда оставался последним столбцом, его нельзя перетащить в другой столбец, а другие столбцы нельзя поместить в этот последний столбец. Но проблема в том, что, поскольку этот столбец является столбцом шаблона сетки данных, отключение перетаскивания не может быть достигнуто, как описано в большинстве онлайн-статей. Так как я могу этого добиться. Как бы то ни было, всегда нужно, чтобы последний столбец сетки оставался последним столбцом. Его нельзя перемещать. Другие столбцы можно перетаскивать. Так как же мне этого добиться? Любое руководство или совет будет высоко ценится!

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Я не уверен, чего именно вы пытаетесь достичь, но в случае, если вы пытаетесь отключить переупорядочение столбцов, установите для свойства DataGrid.CanUserReorderColumns значение false:

<DataGrid CanUserReorderColumns="False" />

Предыдущее Решение отключает переупорядочение столбцов для всех столбцов.
Поскольку требуется, чтобы последний столбец был закреплен, вам нужно расширить DataGrid, чтобы реализовать это поведение, переопределив DataGrid.OnColumnReordering :

CustomDataGrid.cs

class CustomDataGrid : DataGrid
{
  private int ReorderingColumnOriginalDispalyIndex { get; set; }

  #region Overrides of DataGrid

  protected override void OnColumnReordering(DataGridColumnReorderingEventArgs e)
  {
    base.OnColumnReordering(e);

    // Check if the reordering column is the last column
    if (e.Column.DisplayIndex == this.Columns.Count - 1)
    {
      // This is the last column, therefore abort reordering
      e.Cancel = true;
    }    
  }

  protected override void OnColumnReordered(DataGridColumnEventArgse) 
  {
    base.OnColumnReordered(e);

    // Check if the reordered column is the last column (after the pinned column)
    if (e.Column.DisplayIndex == this.Columns.Count - 1)
    {
      // This is the last column.
      // A movable column was moved to an illegal position.
      // Coerce position by moving it to the position before the pinned column
      e.Column.DisplayIndex = this.Columns.Count - 2;
    }    
  }

  #endregion
}

Использование

<CustomDataGrid x:Name="DataGridWhichHasTheLastColumnPinned" />
0 голосов
/ 01 февраля 2020

C#

this.datagrid.AllowDraggingRows = false;
this.datagrid.AllowDrop = false;

XAML

<Syncfusion:SfDataGrid x:Name="datagrid" 
AllowDraggingRows="False"
AllowDrop="False"
ItemsSource="{Binding Source}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...