我正在以编程方式创建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;
感谢您的帮助。
答案 0 :(得分:1)
最后找到了。
protected override void OnCellEnter(DataGridViewCellEventArgs e)
{
base.OnCellEnter(e);
if (!this.CurrentCell.Displayed)
{
this.FirstDisplayedScrollingColumnIndex = e.ColumnIndex;
}
}
即使这是一种奇怪的行为。在创建列时,当列的宽度之和比DGV控件的宽度最窄时,然后(手动用鼠标)增加超出DGV宽度的列的宽度,就可以正常工作,如预期的那样。 但是,当列的宽度之和最大时,就是需要这段代码。 希望这对某人有帮助,即使这不是一个很好的解决方案。