none
Seltsames Verhalten DataView RRS feed

  • Frage

  • Hallo Zusammen,

    ich habe ein seltsames Verhalten einer DataView.

    Das anzeigende Control ist ein DataGrid.

    <DataGrid x:Name="MyDataGrid"     
                                  SelectionUnit="CellOrRowHeader" 
                                  IsSynchronizedWithCurrentItem="True"
                                  AutoGenerateColumns="True"
                                  ItemsSource="{Binding Path=myDataView, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, Mode=TwoWay}"
                                  MouseLeftButtonDown="MyDataGrid_MouseLeftButtonDown">
                          
                        </DataGrid>

    Über mein ViewModel übergebe ich eine DataColumn und trage automatisiert einen Werte in eine Zeile der zugehörigen DataTable ein.

    DataColumn col = ArticleTestCount_DataTable.Columns.Add(string.Format("{0}{1}{2}{3}{4}{5}{6}", model.ArticlenumberString, Environment.NewLine, model.BrandString, Environment.NewLine, model.SeriesString, Environment.NewLine, model.TypeOfItemString), typeof(string)); ArticleTestCount_DataTable.Rows[1][col] = model.Quantity;

    Zuletzt übergebe ich die DataTable als DataView an meine Anzeigende DataView

    myDataView = ArticleTestCount_DataTable.AsDataView();

    Soweit So gut.
    Bei einigen DataColumns scheint jedoch etwas schief zu laufen.
    Die DataView zeigt mir die automatisiert eingetragene Zahl nicht an.

    Im Debugmodus sehe ich jedoch in der DataView und auch in der DataTable, dass die Daten vorhanden sind.

    Wie löse ich mein Problem.

    Versuche ich Werte in der entsprechenden nicht erkannten Spalte zu ändern schmiert die Anwendung ab.

    Meldung => bidirektionale Bindung erfordert "Path" oder "XPath"

    Wieso funktioniert das Binding teilweise und teilweise nicht?


    Gruß

    Peter

    Wer grob fahrlässige Rechtschreibfehler findet, darf diese behalten ;0)

    Donnerstag, 19. November 2015 09:34

Antworten

  • Hi Peter,
    ich habe es jetzt so verstanden, dass Du eine variable Anzahl von Spalten (Artikel) darstellen willst, die alle die gleichen Eigenschaften haben, die als Zeilen (Prüfmethoden) dargestellt werden sollen. In den Zellen wird dann ein Parameter der Prüfmethode (Zeile) zu einem Artikel (Spalte) eingegeben. Das ist eine typische n:m-Beziehung. Dafür gibt es kein Standard-Steuerelement und Du musst deshalb das  selbst entwickeln.

    Eine einfache Möglichkeit wäre, eine Liste mit Prüfmethoden zu halten, die eine Liste oder Array mit Artikeln enthält. Liste bzw. Array ist bei allen Prüfmethoden gleich groß und enthält die anzuzeigenden bzw. zu erfassenden Werte (je Prüfmethode und Artikel). Zur Anzeige nutzt Du ein DataGrid, welches die Liste der Prüfmethoden als Datenquelle nutzt. Die Spalten für die Artikel werden zur Laufzeit dynamisch hinzugefügt und an den jeweiligen Index in der Liste bzw. Array der Artikel gebunden. Für die Bindung kann man einen Konverter nutzen, um Typkonvertierungen durchzuführen.

    Denkbar wäre auch eine "fiktive" Bindung der dynamisch erzeugten Artikel-Spalten, die dann mittels Konverter die n:m-Beziehung umsetzen.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Samstag, 28. November 2015 05:21

Alle Antworten

  • Hi Peter,
    die Bindung an klassische nicht typisierte ADO.NET-Objekte bringt u.U. Probleme, wenn der Spaltentyp sich nicht sauber als Eigenschaft bereitstellen lässt. Besser ist es mit typisierten DataSets zu arbeiten oder gleich mit dem EF.

    Unklar ist im Code, warum Du für die ItemsSource Update-Eigenschaften spezifizierst. Das ItemsSource-Objekt wird doch vom DataGrid nicht geändert. Geändert werden maximal die Feldinhalte.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Donnerstag, 19. November 2015 17:10
  • Ja da ist wahrscheinlich das Problem.

    Ich muss aber Spalten Dynamisch generieren.

    Eigentlich brauche ich das DataGrid nur als Anzeige für Daten die so nicht in einer Datenbank liegen.

    Es dient nur zur Anzeige und zum ändern der Daten.

    Diese werden letztendlich in einem XML-File gespeichert, dass dann per E-mail verschickt werden kann um an anderer Stelle eingelesen zu werden.

    Am Ende werden Prüfaufträge in einer Qualitätsmanagementsoftware automatisch erzeugt, die das XML-File Lesen kann.


    Gruß

    Peter

    Wer grob fahrlässige Rechtschreibfehler findet, darf diese behalten ;0)

    Freitag, 20. November 2015 11:48
  • Hi Peter,
    mir ist Dein Ziel nicht klar.

    Spalten (welche sind damit gemeint?) dynamisch einer Spaltenliste hinzuzufügen, sollte kein Problem sein.

    Wenn ein DataGrid für die Anzeige von Daten, die nicht in der Datenbank liegen, genutzt werden soll, benötigt man keine DataTable. Da reicht eine typisierte Liste.

    Solch eine typisierte Liste kann man auch mit Daten aus einer XML-Datei füllen. Oder, man serialisiert die XML-Datei.

    Auch, wenn man eine typisierte Liste nutzt, kann man bei Kenntnis der XML-Schnittstelle, die XML-Datei daraus erzeugen.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Freitag, 20. November 2015 12:17
  • Gruezi,

    hmm wahrscheinlich habe ich da etwas komplett falsch gemacht.

    Ich habe zum einen eine Tabelle mit Probendaten und eine Tabelle mit Prüfmethoden.

    Jetzt sollen Artikel zur Laufzeit den Prüfmethoden zugeordnet werden und dazu noch eine Anzahl an Artikel aufgelistet und editierbar sein. Diese Kombination sollte so wie in meiner Ansicht Dargestellt werden.

    Also Prüfmethoden in  Rows und Artikel als Header.
    Der User fügt also Artikel hinzu und gibt die Anzahl der Artikel für die verschiedenen Prüfmethoden an.

    Diese Daten hole ich mir dann ab und speicher diese im XML-Format ab, damit ich die Datei per Mail weiterleiten kann.


    Gruß

    Peter

    Wer grob fahrlässige Rechtschreibfehler findet, darf diese behalten ;0)

    Montag, 23. November 2015 08:18
  • Hi Peter,
    ich habe es jetzt so verstanden, dass Du eine variable Anzahl von Spalten (Artikel) darstellen willst, die alle die gleichen Eigenschaften haben, die als Zeilen (Prüfmethoden) dargestellt werden sollen. In den Zellen wird dann ein Parameter der Prüfmethode (Zeile) zu einem Artikel (Spalte) eingegeben. Das ist eine typische n:m-Beziehung. Dafür gibt es kein Standard-Steuerelement und Du musst deshalb das  selbst entwickeln.

    Eine einfache Möglichkeit wäre, eine Liste mit Prüfmethoden zu halten, die eine Liste oder Array mit Artikeln enthält. Liste bzw. Array ist bei allen Prüfmethoden gleich groß und enthält die anzuzeigenden bzw. zu erfassenden Werte (je Prüfmethode und Artikel). Zur Anzeige nutzt Du ein DataGrid, welches die Liste der Prüfmethoden als Datenquelle nutzt. Die Spalten für die Artikel werden zur Laufzeit dynamisch hinzugefügt und an den jeweiligen Index in der Liste bzw. Array der Artikel gebunden. Für die Bindung kann man einen Konverter nutzen, um Typkonvertierungen durchzuführen.

    Denkbar wäre auch eine "fiktive" Bindung der dynamisch erzeugten Artikel-Spalten, die dann mittels Konverter die n:m-Beziehung umsetzen.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Samstag, 28. November 2015 05:21