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

C#实现DataGridView在新窗口加载SQL查询数据的问题

在新窗体的DataGridView中显示SQL查询结果的解决方案

步骤1:修改displayForm,添加数据加载方法

在displayForm类中添加一个公共方法,用于接收查询到的DataTable并绑定到窗体的DataGridView:

public partial class displayForm : Form
{
    public displayForm()
    {
        InitializeComponent();
    }

    // 公共方法:接收DataTable并设置DataGridView数据源
    public void LoadQueryData(DataTable resultData)
    {
        // 替换成你新窗体中DataGridView的实际控件名
        dataGridView1.DataSource = resultData;
    }
}

步骤2:修改主窗体的查询逻辑,传递数据到新窗体

在主窗体的searchBtn_Click方法中,查询完成后实例化displayForm,调用上面的方法传递DataTable,再显示新窗体:

private void searchBtn_Click(object sender, EventArgs e)
{
    try
    {
        using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
        {
            if (cn.State == ConnectionState.Closed)
                cn.Open();
            using(DataTable dt = new DataTable("testTbl2"))
            {
                using (SqlCommand cmd = new SqlCommand("select *from testTbl2 where firstName = @firstName or lastName like @lastName", cn))
                {
                    cmd.Parameters.AddWithValue("firstName", searchTxt.Text);
                    // 修复模糊查询:添加通配符%,否则like会变成精确匹配
                    cmd.Parameters.AddWithValue("lastName", $"%{searchTxt.Text}%");
                    
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(dt);
                    
                    // 实例化新窗体并传递查询结果
                    displayForm resultForm = new displayForm();
                    resultForm.LoadQueryData(dt);
                    resultForm.Show();

                    // 可选:如果需要在当前窗体保留显示,取消下面两行注释
                    // dataGridView.DataSource = dt;
                    // totalLbl.Text = $"Total records: {dt.Rows.Count}";
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

关键说明

  • 原代码问题:仅打开新窗体但未传递查询数据,导致新窗体的DataGridView无数据源,所以显示为空。
  • 模糊查询修复:原lastName like @lastName写法缺少通配符,会变成精确匹配,添加%后才能实现真正的模糊查询。
  • 封装原则:通过公共方法传递数据而非直接修改新窗体控件属性,符合面向对象封装思想,避免控件依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:20:33