首页 > 解决方案 > 无法在 Windows 窗体应用程序 C# 中更新 datagridview 数据

问题描述

我的 Windows 表单应用程序中有两个表单。我在 form1 中有一个 datagridview,我可以从 form1 更新 datagridview 的数据。现在,我需要从 form2 更新 datagridview。我从 form2 调用相同的方法,我用它来从 form1 更新 datagridview。

从form2调用该方法时,在调试中我可以看到它更新了datagridview的数据源,但它没有更新UI上的数据。

我知道这是一个重复的问题。我尝试了很多不同的方法。我也尝试过 MdiContainer 的概念,但对我没有用。

我在 form1 中有以下方法,这些方法可以更新 datagridview(CustomerList) 的数据,并在从 form1 调用 BindCustomerList() 方法时更新 UI 上的 datagridview

//form1
public void BindCustomerList()
{
     CustomerList.AutoGenerateColumns = false;
     CustomerList.DataSource = FetchEmpDetails();
     CustomerList.ClearSelection();
}

public DataTable FetchEmpDetails()
{
      if (sqlCon.State == ConnectionState.Closed)
      {
            sqlCon.Open();
      }
      DataTable dtData = new DataTable();
      sqlCmd = new SqlCommand("sp_customers", sqlCon);
      sqlCmd.CommandType = CommandType.StoredProcedure;
      sqlCmd.Parameters.AddWithValue("@ActionType", "FetchData");
      SqlDataAdapter sqlSda = new SqlDataAdapter(sqlCmd);
      sqlSda.Fill(dtData);
      return dtData;
}

我正在使用下面的代码从 form2 调用 BindCustomerList(),它更新了 datagridview(CustomerList) 的数据源,但没有更新 form1 中的 UI。

//form2 button click event    
private void btnSave_Click(object sender, EventArgs e)
{
    Form1 form1 = new Form1();    //object of form1 in form2
    this.Close();                 //closing form2 on button click
    form1.BindCustomerList();     //calling form1 method to update datagridview.
}

标签: c#.netwinformsdatagridviewdesktop-application

解决方案


让您的 form2 构造函数接受一个数据表参数,并将其分配给另一个网格的 DataSource:

public Form2(DataTable dt){
  InitializeComponent();

  otherDataGridView.DataSource = dt;
}

当您在 form1 中创建一个新的 Form2 时,至少已经调用了 BindCustomerList 一次:

var f = new Form2(CustomerList.DataSource as DataTable);

我从 form2 调用 BindCustomerList()

它不起作用;bindCustomerList 设置form1的datagridview的DataSource;这与form2无关。要让表单共享数据,您必须传递要共享的数据,例如在我上面的代码中(例如)


推荐阅读