DataGridView не прокручивается горизонтально - PullRequest
0 голосов
/ 19 октября 2018

Я создаю Winform DataGridView программно.Мне нужно создать несколько разных списков, поэтому я добавляю каждый столбец динамически.Проблема, с которой я сталкиваюсь, состоит в том, когда сумма ширины всех столбцов больше, чем ширина DataGridView.Горизонтальная полоса прокрутки показывает правильно, работает правильно, когда я перемещаю ее, но, когда я нажимаю TAB, чтобы перейти к ячейке, которая находится за пределами видимого диапазона DGV, не прокручивается автоматически.Ниже показано, как я устанавливаю DGV, будучи «этим» самим DataGridView.

  public DataGridViewCellStyle GridStyle()
  {
     // Set the column header style.
     DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();
     columnHeaderStyle.ForeColor = DataFormatting.RegularForeColor;
     columnHeaderStyle.BackColor = DataFormatting.RegularBackColor;
     columnHeaderStyle.Font = DataFormatting.FontBold;
     return columnHeaderStyle;
  }

  public DataGridViewCellStyle GridStyleAlternate()
  {
     DataGridViewCellStyle oAlternas = new DataGridViewCellStyle();
     oAlternas.BackColor = DataFormatting.AlternateBackColor;
     oAlternas.Font = DataFormatting.Font;
     return oAlternas;
  }

  public void GridFormat()
  {
     //Estilo de los cabezales de las columnas
     this.ColumnHeadersDefaultCellStyle = GridStyle();
     this.AlternatingRowsDefaultCellStyle = GridStyleAlternate();

     // Formato del grid
     this.AllowUserToAddRows = true;
     this.AllowUserToDeleteRows = true;
     this.AllowUserToOrderColumns = true;
     this.AllowUserToResizeColumns = true;
     this.AllowUserToResizeRows = false;
     //this.BackgroundColor = SystemColors.ActiveBorder;
     this.Font = DataFormatting.Font;
     this.MultiSelect = false;
     this.ScrollBars = ScrollBars.Both;
     this.ShowCellErrors = false;
     this.ShowEditingIcon = false;
     this.ShowRowErrors = false;

     //Set the edit mode to "on enter" so that when a cell gains focus it automatically enters editing mode
     this.AutoGenerateColumns = false;
     this.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells | DataGridViewAutoSizeRowsMode.DisplayedHeaders;
     this.EditMode = DataGridViewEditMode.EditOnEnter;
     this.RowHeadersVisible = true;
     this.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect | DataGridViewSelectionMode.CellSelect;

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 20 октября 2018

Наконец нашел его.

  protected override void OnCellEnter(DataGridViewCellEventArgs e)
  {
     base.OnCellEnter(e);
     if (!this.CurrentCell.Displayed)
     {
        this.FirstDisplayedScrollingColumnIndex = e.ColumnIndex;
     }
  }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...