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

运行时创建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:47:59