none
datagrid ItemsSource Zelleninhalt ändern RRS feed

  • Frage

  • Hallo zusammen,

    ich suche nach einer einfachen Methode in der  myDG.ItemsSource  einen Zelleninhalt per C# zu ändern.

    Gegeben sind Row- und Column-Index.

    Besten Dank

    Carl-Heinz

    Dienstag, 14. Juni 2016 08:28

Antworten

  • Hi Marcus,
    auch wenn Du den Spaltennamen kennst, funktioniert die Punktnotation nur, wenn ein typisiertes DataSet genutzt wird. Bei einem nicht typisierten DataSet musst Du wie bei einem Jagged Array zugreifen.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    Dienstag, 14. Juni 2016 13:36
  • Hi Marcus,
    was soll das Mode=TwoWay im DataContext bewirken? Das DataGrid ändert den Verweis auf das Objekt "Daten" nicht selbständig, weshalb auch kein Rückschreiben vorgesehen werden braucht.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    Dienstag, 14. Juni 2016 13:38

Alle Antworten

  • Hallo Markus,

    danke für die rasche Antwort.

    leider:

    1.) beinhaltet die Methode nur den rowindex, nicht aber auch die Spalte.

    2.) erhalte ich folgende Fehlermeldung bei der ich nicht weis, was ich machen soll.

         System.InvalidOperationException: Der Vorgang ist während der Verwendung von "ItemsSource" ungültig. Verwenden Sie stattdessen "ItemsControl.ItemsSource"....

    Viele Güße

    Carl-Heinz

    Dienstag, 14. Juni 2016 09:30
  • Hi Marcus,
    wenn kein typisiertes DataSet genutzt wird oder auch sortiert wurde (Spaltenklick), funktioniert Dein Code nicht.

    Wenn nur Zeilennummer und Spaltennummer gegeben sind, muss erst einmal aus den Bindungen der Spalten ermittelt werden, um welchen Spaltennamen es sich handelt. Anstelle auf die unsortierte Datenquelle zuzugreifen, muss man auf die Sicht zugreifen. Damit das recht einfach umsetzbar ist, sollte man die ItemsSource an eine Sicht binden.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    Dienstag, 14. Juni 2016 11:02
  • Hallo Marcus

    leider auch nichts.

    Fehler: Eine Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "DataGrid" angewendet werden.

    Die Struktur:

     <DataGrid x:Name="InputGrid"
                Height="449" Width="147"
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                IsTextSearchEnabled="True"
                IsTextSearchCaseSensitive="True"
                RowDetailsVisibilityMode="VisibleWhenSelected"
                EnableRowVirtualization="False"
                RenderTransformOrigin="0.803,0.506"
                Margin="7,85,0,0"
                Background="{x:Null}"
                IsSynchronizedWithCurrentItem="True"
                CanUserReorderColumns="False"
                SelectionMode="Single"
                ClipboardCopyMode="None"
                BorderThickness="0"
                SelectionUnit="CellOrRowHeader"
                AutoGenerateColumns="True"
                IsReadOnly="False"
                CanUserSortColumns="False"
                CanUserResizeRows="False"
                AreRowDetailsFrozen="True"
                CurrentCellChanged="InputGrid_CurrentCellChanged"
                CellEditEnding="InputGrid_CellEditEnding"
                      SelectedCellsChanged="InputGrid_SelectedCellsChanged"
                HorizontalContentAlignment="Center"
                HorizontalScrollBarVisibility="Disabled"
                 >
            </DataGrid>
      

    Das DataGrid besteht aus drei Spalten:  ID, Stufe, Dauer.

    Aufgebaut wird es per Code aus einer Datenbank query.

    Gruß

    Carl-Heinz  

    Dienstag, 14. Juni 2016 11:12
  • Hi Marcus,
    auch wenn Du den Spaltennamen kennst, funktioniert die Punktnotation nur, wenn ein typisiertes DataSet genutzt wird. Bei einem nicht typisierten DataSet musst Du wie bei einem Jagged Array zugreifen.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    Dienstag, 14. Juni 2016 13:36
  • Hi Marcus,
    was soll das Mode=TwoWay im DataContext bewirken? Das DataGrid ändert den Verweis auf das Objekt "Daten" nicht selbständig, weshalb auch kein Rückschreiben vorgesehen werden braucht.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    Dienstag, 14. Juni 2016 13:38
  • Hallo zusammen,

    die Antwort von Peter hat mich auf die richtige Idee gebracht.

    Der Inhalt meines Datagrid befindet sich in einem Array:  private List<Eingabe> _data = new List<Eingabe>();

    Der Zugriff auf die Zellen sieht wie folgt aus:

        var currentRowIndex = InputGrid.Items.IndexOf(InputGrid.CurrentItem);

        _data[currentRowIndex].Dauer = ein int wert;

    nochmals vielen Dank für die Beiträge

    viele Grüße

    Carl-Heinz

    Dienstag, 14. Juni 2016 14:17
  • Hi Carl-Heinz,
    ein List<...> ist kein Array, obwohl sie sich im Zugriff auf die Elemente ähneln.

    Falls es mal erforderlich ist, dass der Anwender mit einen Klick auf den Spaltenkopf die Anzeige umsortiert, kann Dein Code nicht mehr richtig funktionieren. Es ist deshalb besser, mit Sichten zu arbeiten (Objekte die ICollectionView implementieren, wie beispielsweise CollectionViewSource.View).


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen! Leben retten!
    Wir essen Opa.
    Wir essen, Opa.

    Dienstag, 14. Juni 2016 18:02
  • Hi Peter,

    danke für den Hinweis.

    Da muss ich noch lernen.

    In meiner Anwendung lassen sich -gewollt- die Spalten nicht umsortieren.

    Viele Grüsse

    Carl-Heinz

    Mittwoch, 15. Juni 2016 13:24