Winform中代码动态初始化的DataGridView滚动条不显示问题求助
解决方案
按优先级依次排查修改:
- 显式设置Dock属性,避免固定尺寸带来的滚动判定异常
动态创建的DataGridView默认不会继承拖拽生成控件的Dock默认值,添加代码:
如果你不需要铺满Tab页,保留固定尺寸的话,额外添加:panGridView.Dock = DockStyle.Fill;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
相关产品推荐
相关产品推荐

