You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Winform中代码动态初始化的DataGridView滚动条不显示问题求助

解决方案

按优先级依次排查修改:

  • 显式设置Dock属性,避免固定尺寸带来的滚动判定异常
    动态创建的DataGridView默认不会继承拖拽生成控件的Dock默认值,添加代码:
    panGridView.Dock = DockStyle.Fill;
    
    如果你不需要铺满Tab页,保留固定尺寸的话,额外添加:
    panGridView.AutoSize = false;
    
  • 修正属性设置顺序,在添加到父容器前完成滚动条相关配置
    ScrollBars属性如果是在控件挂载到父容器后设置,可能不会触发布局重绘,建议将panGridView.ScrollBars = System.Windows.Forms.ScrollBars.Both;放在Controls.Add方法调用之前,添加完成后手动调用刷新:
    panGridView.PerformLayout();
    
  • 排查父容器属性冲突
    确认对应TabPage的AutoScroll属性显式设为false,否则父容器会优先接管滚动事件,不会触发DataGridView自身的滚动条显示:
    tab.TabPages[tab.TabCount - 1].AutoScroll = false;
    
  • 关闭自动行高适配
    避免AutoSizeRowsMode属性设置为自动适配所有行内容,导致所有行被压缩到刚好在控件可视区显示,没有溢出就不会触发滚动条:
    panGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
    

修改后完整代码参考

public void AddNewPanTab(TabControl tab, ComboBox panIndex)
{
    var newTab = new TabPage("Panneau " + tab.TabCount);
    newTab.AutoScroll = false;
    tab.TabPages.Add(newTab);

    DataGridViewDragNDrop dragNDrop = new DataGridViewDragNDrop();
    DataGridView panGridView = new DataGridView();
    panGridView.Name = "panGridView_" + tab.TabCount;
    
    panGridView.RowTemplate.Height = 24;
    // 不需要固定尺寸可删除下一行,保留Dock.Fill即可
    panGridView.Size = new System.Drawing.Size(1375, 458);
    panGridView.Dock = DockStyle.Fill;
    panGridView.ScrollBars = System.Windows.Forms.ScrollBars.Both;
    panGridView.AutoSize = false;
    panGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
    
    panGridView.Columns.Add("id", "id");
    panGridView.Columns.Add("part_code", "part_code");
    panGridView.Columns.Add("description", "description");
    panGridView.Columns.Add("size", "size");
    panGridView.Columns.Add("manufacturier", "manufacturier");
    panGridView.Columns.Add("distributeur", "distributeur");
    panGridView.Columns.Add("prix", "prix");
    panGridView.Columns.Add("revise", "revise");
    panGridView.Columns.Add("date_revision", "date_revision");
    panGridView.Columns.Add("Quantité", "Quantité");
    panGridView.Columns[0].Width = 100;
    panGridView.Columns[1].Width = 150;
    panGridView.Columns[2].Width = 250;
    panGridView.Columns[3].Width = 100;
    panGridView.Columns[4].Width = 100;
    panGridView.Columns[9].Width = 75;
    dragNDrop.view = panGridView;
    
    panIndex.Items.Add(tab.TabCount - 1);
    panGridView.CellMouseDown += dragNDrop.DataGridView_CellMouseDown;
    panGridView.MouseMove += dragNDrop.dataGridView_MouseMove;
    panGridView.MouseUp += dragNDrop.dataGridView_MouseUp;

    newTab.Controls.Add(panGridView);
    panGridView.PerformLayout();
}

内容的提问来源于stack exchange,提问作者user17020926

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:54:07