我正在使用VS 2010和.NET framework 4.0。有没有办法在选中时显示整个DataGridViewCell
(矩形)(键不是点击)。
我有一个DataGridView
控件有10 - 12列,当没有显示单元格(物理上)到达时,网格不会水平滚动。
我正在使用SelectionMode.FullRowSelect
和StandardTab = false
属性。
网格是只读的,当用户在Keys.Apps
上按CurrentCell
时,会显示一个上下文菜单,但如果CurrentCell
未显示但是已聚焦(带有虚线的矩形) )网格不滚动,菜单不应出现。
我尝试将Frozen = false
设置为所有代码生成的列,但没有成功。
也许在dataGridView1_CellEnter
事件中,设置当前单元格(所有矩形,而不仅仅是数据)完全显示(如果之前不是)
(FirstDisplayedCell
属性不完全是我的解决方案)
答案 0 :(得分:1)
我已经尝试了你所描述的内容,看起来只有使用鼠标才会出现问题,使用Tab键或箭头键会自动将整个单元格聚焦在一起。因此,以下解决方案是处理使用鼠标,允许用户点击部分显示的单元格,然后在此之后显示整个单元格。我们必须处理CellClick
事件,使用HorizontalScrollingOffset
属性以编程方式滚动水平滚动条,当然我们必须自己计算滚动值:
//CellClick event handler for the dataGridView1
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){
var colRect = dataGridView1.GetColumnDisplayRectangle(e.ColumnIndex, false);
colRect.X = colRect.Right - dataGridView1.Columns[e.ColumnIndex].Width;
int offSet = colRect.Right - dataGridView1.Width +
SystemInformation.VerticalScrollBarWidth;
if (offSet < 0) {
var rowHeaderWidth = !dataGridView1.RowHeadersVisible ? 0 :
dataGridView1.RowHeadersWidth;
offSet = colRect.Left < rowHeaderWidth ? colRect.Left - rowHeaderWidth : 0;
}
dataGridView1.HorizontalScrollingOffset += offSet;
}
更新:对于使用键处理聚焦,您可以尝试处理CellEnter
,但上述所有代码仍然有用:
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e){
//your problem happens only when ReadOnly is true, so
//we just need to handle it when ReadOnly is true
if(!dataGridView1.ReadOnly) return;
//the remaining code...
//....
}
答案 1 :(得分:0)
尝试使用此属性设置。
RowHeadersWidthSizeMode=AutoSizeToDisplayedHeaders;
答案 2 :(得分:0)
您在网格中设置属性
AutoSizeColumnMode
为AllCells
它可以帮助你。