none
WPF Datengrid RRS feed

  • Frage

  • Hallo,

    ich habe ein DataGrid in einer WPF-Browseranwendung (Visual Studio 2010 und c#). Daran habe ich ein DataSet  gebunden (Daten kommen von einem SQLDataAdapter). Wenn ich im DataGrid navigiere, möchte ich auf den Inhalt einer DataRow zugreifen. Unter Windows Forms habe ich den CurrencyManager

    genutzt, um die aktuelle DataRowView zu ermitteln.

    datagrid = (DataGrid) sender;  CurrencyManager  cm = (CurrencyManager)

    Aus den vorhandenen WPF-Büchern bin ich nicht recht schlau geworden. Da wird über eine ICollectionView geschrieben. Wie ist dieses zu lösen?

    BindingContext[datagrid.DataSource, datagrid.DataMember];
    DataRowView dRowView = (DataRowView) cm.Current;

    Gruß Frank

    • Typ geändert Ionut DumaModerator Dienstag, 27. November 2012 17:06 Keine Rückmeldung des Fragenstellender
    • Typ geändert Ionut DumaModerator Mittwoch, 28. November 2012 10:22 ruckmeldung der Fragenstehler
    Montag, 19. November 2012 13:05

Antworten

  • Ja danke an alle, das Problem ist gelöst. Ich war ein paar Tage im Lande unterwegs.

    Es war dann doch einfacher, als ich dachte. Bei WPF ist halt einiges anders.

    DataRowView dataRowView = dataGrid1.CurrentCell.Item as DataRowView;

    Gruß Frank

     

     var vInhalt = dataRowView.Row["Feldname"];
    Mittwoch, 28. November 2012 10:19

Alle Antworten

  • Hallo Frank,

    Vieleicht kann das Dir weiterhelfen. http://stackoverflow.com/questions/895778/how-do-i-get-the-selected-datarow-in-a-datagridview

    Gruß,

    Ionut

    Dienstag, 20. November 2012 15:37
    Moderator
  • Hallo Frank,

    generell ist darauf zu achten, das Du an die ItemSource nicht ein beliebige ObservableCollection<T> hängst, sondern eine CollectionView bzw eine ListCollectionView. Die Controls machen das sonst eh intern selber. Ein CollectionView wird wie folgt erzeugt:

    ObservableCollection<Person> persons = new ObservableColection<Person>();
    ListCollectionView personsListCollectionView = CollectionViewSource.GetDefaultCollectionView(persons) as ListCollectionView;

    Dabei gehe ich von der Existes einer Klasse "Person" aus. Nun setzt Du die ItemSource des DataGrids doch auf die personsListCollectionView. Wenn Du nun im DataGrid noch die Eigenschaft "IsSyncroniteWithCurrentItem" auf true setzt, kannst Du von der personsListCollectionView jederzeit durch Abfragen der CurrentItem-Eingenschaft ein Object zurückbekommen.

    Alternativ kannst Du natürlich auch direkt aus der Eigenschaft SelectedItem des DataGrids die Person bekommen.

    Gruß
    Rene


    Mittwoch, 21. November 2012 11:22
  • Hallo Frank,

    Hast Du eigentlich Dein Problem gelöst ?

    Können wir Dir weiterhelfen?

    Gruß,

    Ionut

    Montag, 26. November 2012 14:13
    Moderator
  • ****************************************************************************************************************
    Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
    Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
    ****************************************************************************************************************
    Dienstag, 27. November 2012 17:05
    Moderator
  • Ja danke an alle, das Problem ist gelöst. Ich war ein paar Tage im Lande unterwegs.

    Es war dann doch einfacher, als ich dachte. Bei WPF ist halt einiges anders.

    DataRowView dataRowView = dataGrid1.CurrentCell.Item as DataRowView;

    Gruß Frank

     

     var vInhalt = dataRowView.Row["Feldname"];
    Mittwoch, 28. November 2012 10:19
  • Hallo Frank,

    Es freut uns dass Du Dein Problem lösen könntest und danke dass Du Deine Lösung hier im Forum gepostet hast. Jetzt können auch andere unter Umständen profitieren die das gleiche Problem haben.

    Gruß,

    Ionut

    Mittwoch, 28. November 2012 10:24
    Moderator