Dateninhalt vom einen DataTable ins andere übernehmen

Sascha Wetzel

Grünschnabel
Hi @ all,

ich hab mal wieder so n Problemsche :)

Ich hab in einer Klasse DataLayer.cs die folgende Methode:
Code:
public DataTable getData()
{
     dataTable.Clear();
     dataAdapter = newNew.selectFromDatabase("SELECT * FROM Ausbilder WHERE Geloescht=False");
      dataAdapter.Fill(dataTable);
      return dataTable;
}

In meiner Form1.cs erzeug ich ein neues private DataTable und weiß diesem die Inhalte der
getData() Methode zu. Die Inhalten stehen auch im dt wenn ich mit dem Debugger durchgeh!

Die Daten sind dann auch in dem DataTable der Form1, nur werden diese im DataGridView nicht angezeigt.

Mein DataGridView hat als DataSource das DataTable der Form1.

Hier noch ein bisschen Code aus der Form1
Code:
private DataTable dataTable = new DataTable("Ausbilder");

dataTable = dataLayer.getData();
fillDataTableSetColumnsVisibleFalse();

dataGridView1.DataSource = dataTable;


private void fillDataTableSetColumnsVisibleFalse()
{
    dataTable = dataLayer.getData();
    dataGridView1.Refresh();
    dataGridView1.Columns["ID"].Visible = false;
    dataGridView1.Columns["Geloescht"].Visible = false;
}

Habt ihr eine Idee warum?
 
Hat es vlt. was mit DataBinding zu tun und wenn ja wie****?

Ich google mir heut schon n ganze Tag ein ab aber irgendwie find ich keine Lösung :(
 
Ich glaub du hast da einen kleinen Denkfehler drin, bin mir nicht sicher.

Du hast ein privates DataTable namens "dataTable". In der Methode "fillDataTableSetColumnsVisibleFalse" setzt du dieses auf einen neuen Wert (eine andere Referenz). ABER: Die Referenz von "DataSource" bleibt davon ja unberührt.

Füge mal noch diese eine Zeile ein, um auch dem DataGridView die neue Quelle zu geben.

C#:
private void fillDataTableSetColumnsVisibleFalse()
{
    dataTable = dataLayer.getData();
    
    //Neue Zeile
    dataGridView1.DataSource = dataTable;

    dataGridView1.Refresh();
    dataGridView1.Columns["ID"].Visible = false;
    dataGridView1.Columns["Geloescht"].Visible = false;
}
 
Zurück