C# 未使用最新数据更新DataTable

C# 未使用最新数据更新DataTable,c#,datagridview,datatable,C#,Datagridview,Datatable,我有一个带有组合框的windows窗体,允许用户从下拉列表中选择,然后按下按钮,这将查询API,然后用数据填充SQL Server表,然后格式化数据并在datagridview上显示3个字段。然后,用户可以选择放弃数据或导出到csv 这个过程非常适合一次运行,但是一旦您尝试将第二组信息导出到csv,C变量/数据表将保留第一次运行的信息。我已经验证了服务器端的所有内容都按其应该的方式填充 我逐步完成了代码和调试,并将问题归结为以下事实:这行代码Form1.dtEmpNames=Form1.allE

我有一个带有组合框的windows窗体,允许用户从下拉列表中选择,然后按下按钮,这将查询API,然后用数据填充SQL Server表,然后格式化数据并在datagridview上显示3个字段。然后,用户可以选择放弃数据或导出到csv

这个过程非常适合一次运行,但是一旦您尝试将第二组信息导出到csv,C变量/数据表将保留第一次运行的信息。我已经验证了服务器端的所有内容都按其应该的方式填充

我逐步完成了代码和调试,并将问题归结为以下事实:这行代码Form1.dtEmpNames=Form1.allEmps.DefaultView.ToTabletrue,Name;从不更新选定的新名称。它保留了第一个名字

namespace Be1ng
{
    public partial class Form1 : Form
    {   
        public static DataTable allEmps = new DataTable();
        public static DataTable dtEmpNames = new DataTable();

        public void btnPush_Click()
        {
            allEmps.Clear();

            string query = "Select * from test";
            SqlConnection conn = new SqlConnection(@"Data Source=Server info;Initial Catalog=DB;User Id=user;Password=pwd;");
            conn.Open();
            SqlCommand cmd = new SqlCommand(query, conn);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(allEmps);
            conn.Close();
            Form2 f2 = new Form2();
            f2.ShowDialog();
        }
    }
}
namespace Be1ng
{
    public partial class Form2 : Form
    {
        Private void Form2_Load(object sender, EventArgs e)
        {
            Form1.dtEmpNames = Form1.allEmps.DefaultView.ToTable(true, "Name");
        }
    }
}

远离计算机,所以这是未经测试的,并使用更有意义的数据表名称,但这至少应该提供一个这样做的例子

//Form1 - declare the DataTable in the method and pass it to Form2 load
public void btnPush_Click()
{
  DataTable allEmps = new DataTable();
  //Query your server here
  conn.Close();

  //pass the datatable in the call for the form
  Form2 f2 = new Form2(allEmps);
  f2.ShowDialog();
}

//Then in the form2 load create a new constructor that accepts the DataTable
    private DataTable dtpassed = new DataTable();
    private DataTable dtallemps = new DataTable();

    public Form2(DataTable allemps)
    {
        dtallemps = dtpassed;
        InitializeComponent();
    }
    private void Form2_Load(object sender, EventArgs e)
    {
       dtallemps = dtpassed.DefaultView.ToTable(true, "Name");
    }