2017-12-21 3 views
0

Ich habe ein Fenster mit einem Kombinationsfeld bilden, die ein Benutzer aus der Dropdown-Liste auswählen können, dann eine Taste drücken, die ein API-Abfrage werden dann eine SQL Server-Tabelle mit Daten füllen, dann Formatiere die Daten und zeige 3 Felder in einer Datagridview an. Dann hat der Benutzer die Möglichkeit, die Daten zu verwerfen oder zu einem CSV zu exportieren.Datentabelle keine Daten mit Datum aktualisiert

Nun dieser Prozess funktioniert für einen Lauf perfekt, aber wenn man einen zweiten Satz von Informationen in eine CSV das C# Variablen/Datentabelle behält die Informationen aus dem ersten Lauf zu exportieren versuchen. (Ich habe überprüft, Server-Seite ist alles so bestückt, wie es sein sollte)

Ich Schritt durch meinen Code und debuggen und habe das Problem bis hin zu der Tatsache, dass diese Zeile des Codes Form1.dtEmpNames = Form1.allEmps.DefaultView.ToTable(true, "Name"); nie aktualisiert auf den neuen Namen, der ausgewählt ist. Es behält den Vornamen.

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"); 
     } 
    } 
} 

Antwort

1

weg vom Computer so dass diese nicht getestet ist, und sinnvoller Datatable-Namen verwenden, aber dies sollte zumindest ein Beispiel für die Durchführung einer solchen bieten ...

//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"); 
    } 
Verwandte Themen