DataGridView不是水平滚动

时间:2018-10-19 17:27:49

标签: c# winforms datagridview scroll

我正在以编程方式创建Winform DataGridView。我需要创建几个不同的列表,所以我要动态添加每一列。 我面临的问题是所有列的宽度之和大于DataGridView的宽度。 水平滚动条显示正确,当我移动它时可以正常工作,但是,当我按TAB键转到DGV可见范围之外的单元格时,它不会自动滚动。 下面是我如何设置DGV,即DataGridView本身是“ this”。

  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 :(得分:1)

最后找到了。

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

即使这是一种奇怪的行为。在创建列时,当列的宽度之和比DGV控件的宽度最窄时,然后(手动用鼠标)增加超出DGV宽度的列的宽度,就可以正常工作,如预期的那样。 但是,当列的宽度之和最大时,就是需要这段代码。 希望这对某人有帮助,即使这不是一个很好的解决方案。