运行时创建DataGridView并加载数据库supplies表数据无响应问题求助
解决MouseUp触发后DataGridView未显示的问题
我仔细看了你的代码,问题的核心是你创建了suppliesView这个DataGridView控件,但从来没把它添加到任何容器的Controls集合里——控件必须属于某个父容器(比如你的dataDBPanel或者Form本身)才能在界面上显示出来,光调用Show()是没用的。
下面是具体的修复方案和优化建议:
1. 核心修复:将DataGridView添加到容器控件
在设置完suppliesView的位置、尺寸之后,一定要把它添加到dataDBPanel的Controls中。另外要注意避免重复添加(不然每次触发MouseUp都会多一个DataGridView),可以先判断控件是否已经在容器里:
// 在suppliesView.Show();之前添加 if (!dataDBPanel.Controls.Contains(suppliesView)) { dataDBPanel.Controls.Add(suppliesView); }
2. 添加异常处理排查数据库问题
数据库操作很容易出现连接失败、SQL错误等问题,加上try-catch块能帮你快速定位是否是数据加载环节出了问题:
try { OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\project\FUCKINGVISUALSTUDIOISSOSHIT\loginData.mdb"); OleDbDataAdapter cmd = new OleDbDataAdapter("SELECT * FROM supplies", con); DataTable tbl = new DataTable(); cmd.Fill(tbl); // Fill方法会自动打开/关闭连接,不需要手动调用con.Open()和con.Close() suppliesView.DataSource = tbl; } catch (Exception ex) { MessageBox.Show("数据库加载出错:" + ex.Message); }
另外提一句:OleDbDataAdapter.Fill()方法会自动处理连接的打开和关闭,所以你之前手动写的con.Open()和con.Close()其实可以省略,避免忘记关闭连接导致资源泄漏。
3. 优化控件初始化(可选)
可以把DataGridView的基础样式设置提前放到Form的构造函数里,避免每次触发事件都重复设置:
public managerpage() { InitializeComponent(); // 初始化suppliesView的基础属性 suppliesView.Location = new Point(59, 51); suppliesView.Size = new Size(749, 399); suppliesView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; // 让列自动填充宽度 suppliesView.BorderStyle = BorderStyle.Fixed3D; }
修改后的完整MouseUp事件代码
private void picBoxSuppliers_MouseUp(object sender, MouseEventArgs e) { clickedID = idSuppliersDB; dataDBPanel.Visible = true; dataDBPanel.Dock = DockStyle.Fill; titleDataLbl.Text = "Suppliers Data"; titleDataLbl.Left = (this.Width - titleDataLbl.Width) / 2; // 检查并添加控件到容器 if (!dataDBPanel.Controls.Contains(suppliesView)) { dataDBPanel.Controls.Add(suppliesView); } try { OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\project\FUCKINGVISUALSTUDIOISSOSHIT\loginData.mdb"); OleDbDataAdapter cmd = new OleDbDataAdapter("SELECT * FROM supplies", con); DataTable tbl = new DataTable(); cmd.Fill(tbl); suppliesView.DataSource = tbl; suppliesView.Show(); } catch (Exception ex) { MessageBox.Show("加载数据失败:" + ex.Message); } }
按照上面的修改,触发MouseUp事件后,DataGridView应该就能正常显示了。如果还是有问题,先看弹出的错误提示(如果有的话),或者检查dataDBPanel的Visible属性是否真的被设为true,以及它的尺寸是否足够容纳DataGridView。
内容的提问来源于stack exchange,提问作者SPekkOPs
相关产品推荐
相关产品推荐

