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).
Ich würde keine ArrayList, sondern eine ObservableCollection nehmen.
Wo setzt Du den DataContext? Ist das Füllen im MainThread oder im Hintergrund?
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).
Kannst du uns mal die Definition von csvDaten
zeigen?
Was meinst du mit "dazugehöriger Codeteil"? Code-Behind?
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.
@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>
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.