WinForm点击窗体按钮无法刷新UserControl内DataGridView问题求助
解决UserControl中DataGridView刷新失败的问题
核心问题分析
- 错误操作新实例:你在按钮点击事件里
new PageAppointment()创建的是一个全新的、未在界面显示的UserControl对象,调用它的刷新方法对当前界面上的控件完全无效。 - Refresh方法未加载新数据:
todaygrid.Refresh()仅强制控件重绘界面,不会从数据库重新获取最新数据并绑定到DataGridView,所以即便实例正确,也看不到新插入的内容。
修正后的代码示例
1. 窗体按钮点击事件代码
直接操作当前窗体上已存在的UserControl实例(假设窗体上的UserControl控件名为pageAppointment1):
private void button1_Click_1(object sender, EventArgs e) { // 使用using自动释放数据库连接,避免连接泄漏 using (SqlConnection conn = new SqlConnection("你的数据库连接字符串")) { SqlCommand cmd2 = new SqlCommand("Insert into SchedpTbl(SchedpFullName,SchedpTime,SchedpDate)Values(@cbPatient,@tPicker,@dPicker)", conn); cmd2.Parameters.AddWithValue("@cbPatient", cbPatient.Text); cmd2.Parameters.AddWithValue("@tPicker", tpicker.Text); cmd2.Parameters.AddWithValue("@dPicker", dpicker.Text); conn.Open(); cmd2.ExecuteNonQuery(); } // 调用当前界面上的UserControl实例的刷新方法 pageAppointment1.RefreshDataGridView(); }
2. UserControl的RefreshDataGridView方法代码
修改为重新查询数据库并绑定数据源:
public void RefreshDataGridView() { using (SqlConnection conn = new SqlConnection("你的数据库连接字符串")) { // 查询最新数据 string query = "SELECT SchedpFullName, SchedpTime, SchedpDate FROM SchedpTbl"; SqlDataAdapter adapter = new SqlDataAdapter(query, conn); DataTable dt = new DataTable(); adapter.Fill(dt); // 绑定到DataGridView todaygrid.DataSource = dt; } // 可选:强制控件重绘 todaygrid.Refresh(); }
补充说明
- 替换代码中的
"你的数据库连接字符串"为实际连接字符串,建议统一放在配置文件中,避免重复书写。 - 如果UserControl是动态添加到窗体的,需在添加时保存引用:比如在窗体类中定义
private PageAppointment _pageAppointment;,创建时赋值_pageAppointment = new PageAppointment(); Controls.Add(_pageAppointment);,按钮点击时调用_pageAppointment.RefreshDataGridView();。
内容的提问来源于stack exchange,提问作者Oddy
相关产品推荐
相关产品推荐

