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
相关产品推荐
相关产品推荐

