Как уже упоминалось в комментариях, DataGridView контролирует свои полосы прокрутки и всегда хочет скрыть их, если нет необходимости их просматривать, например, все ячейки помещаются в видимую область сетки.
Однако есть способ заставить DataGridView показывать свои полосы прокрутки, используя отражение, хотя это и есть хак, и я бы не советовал делать это.Ниже приведен пример:
public Form1()
{
InitializeComponent();
// assuming dataGridView1 is a DataGridView control placed on the Form1 form
PropertyInfo property = dataGridView1.GetType().GetProperty(
"HorizontalScrollBar", BindingFlags.NonPublic | BindingFlags.Instance);
if (property != null)
{
ScrollBar scrollbar = (ScrollBar)property.GetValue(dataGridView1, null);
scrollbar.Visible = true;
scrollbar.VisibleChanged += new EventHandler(ScrollBar_VisibleChanged);
}
}
void ScrollBar_VisibleChanged(object sender, EventArgs e)
{
FieldInfo field = dataGridView1.GetType().GetField(
"layout", BindingFlags.NonPublic | BindingFlags.Instance);
if (field != null)
{
object layoutData = field.GetValue(dataGridView1);
FieldInfo insideField = layoutData.GetType().GetField(
"Inside", BindingFlags.Public | BindingFlags.Instance);
Rectangle rect = (Rectangle)insideField.GetValue(layoutData);
ScrollBar scrollBar = (ScrollBar)sender;
scrollBar.Visible = true;
scrollBar.SetBounds(
rect.Left, rect.Height - scrollBar.Height + 1,
rect.Width, scrollBar.Height);
}
}
надеюсь, это поможет, с уважением