DataTable未使用最新数据进行更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataTable未使用最新数据进行更新相关的知识,希望对你有一定的参考价值。
我有一个带有组合框的窗体,允许用户从下拉列表中选择然后按下一个按钮,该按钮将查询API然后用数据填充SQL Server表,然后格式化数据并在datagridview上显示3个字段。然后,用户可以选择丢弃数据或导出到csv。
那么这个过程对于一次运行来说是完美的,但是一旦你尝试将第二组信息导出到csv,C#variables / datatable就会保留第一次运行的信息。 (我已经验证了服务器端的所有内容都应该填充)
我逐步完成我的代码和调试,并将问题隔离到这一行代码Form1.dtEmpNames = Form1.allEmps.DefaultView.ToTable(true, "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");
}
}
}
答案
远离计算机,所以这是未经测试的,并使用更有意义的DataTable名称,但这至少应该提供这样做的一个例子......
//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");
}
以上是关于DataTable未使用最新数据进行更新的主要内容,如果未能解决你的问题,请参考以下文章