Laden...

DataGrid aus Excelliste befüllen --> Databinding?

Erstellt von Schlaftablette vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.381 Views
S
Schlaftablette Themenstarter:in
17 Beiträge seit 2016
vor 7 Jahren
DataGrid aus Excelliste befüllen --> Databinding?

Hallo

leider drehe ich mich seit Stunden im Kreis, hoffe ihr könnt mir helfen:

Ich habe in einem XAML ein Grid, indem ich eine Tabelle anzeigen lassen will.
Dazu sollte sich DataGrid eignen:

<DataGrid x:Name="gridview_csv_Dateiauflistung" HorizontalAlignment="Left" Margin="30,50,0,0" VerticalAlignment="Top" Height="120" Width="140" ItemsSource="{Binding csvDaten}"  AutoGenerateColumns="True">

Im dazugehörigen Codeteil habe ich eine Arraylist angelegt und mit Daten befüllt:

            csvDaten = new ArrayList();
            // testbefüllen
            d = new Daten.datenklasse();
            d.Dateiname = "dateiname eins";
            d.inSQLgefunden = 1;
            csvDaten.Add(d);
            d = new Daten.datenklasse();
            d.Dateiname = "dateiname zwei";
            d.inSQLgefunden = 3;
            csvDaten.Add(d);

Ich schaffe es allerings nicht diese zu verbinden, ich will daß die Daten in der Tabelle angezeigt werden.
gridview_csv_Dateiauflistung finde ich im code, aber ich bekomme kein gridview_csv_Dateiauflistung.Databinding

Wo liegt mein (denk) Fehler ??? ich will einfach nur Daten (die ich vorher irgendwo eingeesen habe) in einer Tabelle anzeigen lassen (und später dann eine Zeile zur weiterbearbeitung auswählen).

W
872 Beiträge seit 2005
vor 7 Jahren

Ich würde keine ArrayList, sondern eine ObservableCollection nehmen.
Wo setzt Du den DataContext? Ist das Füllen im MainThread oder im Hintergrund?

S
Schlaftablette Themenstarter:in
17 Beiträge seit 2016
vor 7 Jahren

In die ObservableCollection werd ich mich reinlesen.

Bisher in java (will auf C# umsteigen) wird beim öffnen des Fensters eingelesen, verglichen und dann dargestellt, dauert ca. 20 sekunden, indem das Fenster eingefroren ist. Das versuche ich hier besser zu machen.

Idealerweise wird das Fenster aufgebaut, und dann nach und nach die Datenzeilen in das DataGrid eingefügt, somit soll es idealerweise hintergrund ablaufen (so zumindest meine Vorstellung).

1.040 Beiträge seit 2007
vor 7 Jahren

Kannst du uns mal die Definition von csvDaten zeigen?

Was meinst du mit "dazugehöriger Codeteil"? Code-Behind?

4.942 Beiträge seit 2008
vor 7 Jahren

Hallo,

... somit soll es idealerweise [im] hintergrund ablaufen (so zumindest meine Vorstellung).

Diese stimmt aber nicht, denn dies passiert alles im UI-Thread und blockiert solange die Anzeige.
Das passende Stichwort dazu lautet: virtualization, s. z.B. WPF: Data Virtualization.

Wenn das Laden der Daten lange dauert, dann wirst du allerdings selber eine Background-Task erstellen müssen, welche dies lädt und erst, wenn dieser beendet ist, dann die Daten an das DataGrid binden.

S
Schlaftablette Themenstarter:in
17 Beiträge seit 2016
vor 7 Jahren

@p!lle

bisher

ArrayList csvDaten; 

ja, vermutlich code behind, im XAML RMT -> Code anzeigen (oder F7)

@Th69
Das wäre erst der nächste Schritt, würde ich in einen eigenen Thread machen (wie ich ihn aus java kenne), ist aber jetzt nicht so wichtig.

jetzt wäre mir mal wichtig, daß ich Daten die ich in einer Collection (ArrayList oder ObservableCollection oder einer anderen) habe mit dem DataGrid binden kann und die Daten angezeigt werden.

In diversen Hilfethemen bekomme ich eine

gridview.Databinding

die .Databinding bekomme ich von meinem GridView aber nicht ???
Wie kann ich die verbinden ??

        <DataGrid x:Name="gridview_csv_Dateiauflistung" HorizontalAlignment="Left" Margin="30,50,0,0" VerticalAlignment="Top" Height="120" Width="140" ItemsSource="{Binding csvDaten}"  AutoGenerateColumns="True">
            
        </DataGrid>
4.942 Beiträge seit 2008
vor 7 Jahren

Das DataBinding hast du schon per


ItemsSource="{Binding csvDaten}"

gemacht, jedoch muß der Name auf eine Eigenschaft (property) verweisen.
Und der "DataContext" muß dann auf das Objekt verweisen, welches diese Eigenschaft enthält (wenn es also - für den Anfang - dieselbe Klasse ist, dann 'this').

Hier noch ein kurzes Tutorial (wenn auch nicht für Listen): WPF Tutorial Teil 4 - Databinding

Mehr Details gibt es unter WPF Data Binding - Part 1.

Generell zu WPF kann ich dir auch WPF tutorial empfehlen.