Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
2D ObservableCollection an DataGrid binden
Wasined
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

2D ObservableCollection an DataGrid binden

beantworten | zitieren | melden

Hallo in die Runde!

Ich möchte eine csv Datei einlesen und in ein Datagrid ausgeben.
Da ich nicht weiß wie viele Zeilen und Spalten die CSV Datei hat mache ich das Einlesen über eine 2 dimensionale ObservableCollection.

Die sehen grundsätzlich so aus:


        public ObservableCollection<ObservableCollection<string>> ImportGrid
        {
            get { return _ImportGrid; }
            set { _ImportGrid = value; OnPropertyChanged(nameof(ImportGrid)); }
        }
        private ObservableCollection<ObservableCollection<string>> _ImportGrid;

        public ObservableCollection<string> ImportSpalten
        {
            get { return _ImportSpalten; }
            set { _ImportSpalten = value; OnPropertyChanged(nameof(ImportSpalten)); }
        }
        private ObservableCollection<string> _ImportSpalten;

Später kommt dann das Einlesen, das funktioniert auch. Meine 2D ObservableCollection ist also korrekt gefüllt.
Wo es krankt ist das Binden an ein DataGrid im Xaml. Das sieht so aus:


<DataGrid CanUserSortColumns="False" CanUserAddRows="False" AutoGenerateColumns="False" CanUserDeleteRows="True"
                  ItemsSource="{Binding ImportGrid}">
            <DataGrid.Columns>
                <md:DataGridTextColumn Binding="{Binding ImportSpalten[0]}"/>
                <md:DataGridTextColumn Binding="{Binding ImportSpalten[1]}"/>
                ....
            </DataGrid.Columns>
        </DataGrid>

Hierbei funktioniert das "Binding="{Binding ImportSpalten[0]}" etc. " natürlich nicht.
Ich möchte nicht einfach alle eingelesenen Spalten darstellen sondern konkret die ersten X.
Wie kann ich also die Werte der Spalten anhand ihres Index abfragen?
Oder bin ich da generell auf dem Holzweg?

Danke für Tipps


Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Wasined am .
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Es gibt aber eine Möglichkeit einen Indexer im XAML zu binden. Du musst mal den Syntax in der Referenz nachschauen. Problem ist aber dass du die Anzahl der Elemente zur Compilerzeit nicht weißt. Man könnte sich daher auch von der Grid-Lösung verabschieden und mit Collections arbeiten (ItemsControl) die wiederum im ItemTemplate eine Collection aufweisen.
Eine Alternative wäre ein Converter.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von witte am .
private Nachricht | Beiträge des Benutzers
Wasined
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

beantworten | zitieren | melden

Zitat
Es gibt aber eine Möglichkeit einen Indexer im XAML zu binden
Hast Du da ein Beispiel für mich?
Zitat
Problem ist aber dass du die Anzahl der Elemente zur Compilerzeit nicht weißt.
Nein, ich möchte immer die ersten 10 Einträge sehen. Wenn weniger eingelesen wurde soll es leer sein. Wenn mehr eingelesen wurde werden die Werte mit Index > 10 einfach nicht angezeigt.
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 966

beantworten | zitieren | melden

Na einfach Indexer-Syntax: StackOverflow
Ach so ich sehe jetzt dass du Schwierigkeiten mit der DataGridTextBoxColumn hast. Dann nimm eine DataGridTemplateColumn. Dort einfach eine TextBox oder TextBlock reinsetzen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von witte am .
private Nachricht | Beiträge des Benutzers
jogibear9988
myCSharp.de - Member



Dabei seit:
Beiträge: 589
Herkunft: Offenau

beantworten | zitieren | melden

Les die csv in eine Datatable ein und binde an diese.
Das andere wird nicht funktionieren.
cSharp Projekte : https://github.com/jogibear9988
private Nachricht | Beiträge des Benutzers