SAP RFC in Listview imporieren

  • WPF

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    SAP RFC in Listview imporieren

    Hi Leute,

    ich habe da mal eine Aufgabe der ich leider in WPF noch nicht gewachsen bin. Ich habe eine RFC call von SAP und bekommen einen Table mit daten geliefert.
    Ich möchte diese Daten in deinem Listview abbilden. Mit Listview.datasource geht es leider nicht ->

    error: Unable to cast COM object of type 'System.__ComObject' to interface type 'System.Collections.IEnumerable'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{496B0ABE-CDEE-11D3-88E8-00902754C43A}' failed due to the following error: 'No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))' and the COM component does not support IDispatch::Invoke calls for DISPID_NEWENUM.

    Zuvor, als ich es in Winforms hatte, lass ich das Listview so ein:

    Quellcode

    1. For Each row In PartsList.data
    2. StrRow = row
    3. If StrRow.Length = 6 AndAlso StrRow.Contains(".") Or StrRow.Length = 7 AndAlso StrRow.Contains(".") Then
    4. PartLists.LWPPL.Items.Add(row)
    5. Rowcount = Rowcount + 1
    6. Else
    7. PartLists.LWPPL.Items(Rowcount).SubItems.Add(row)
    8. End If
    9. Next


    dies hat wunderbar funktioniert. Leider gibt es in WPF keine subitems mehr. Und wie ich in die anderen Spalten komme weiss ich nicht ?(

    Kann mir jmd weiterhelfen wie ich das wieder hinbekommen? Wenn es natürlich einen befehl gibt um meine items in die nächste spalte zu legen ist das thema eigentlich sofort erledigt :P

    Vielen Dank für die Hilfe
    Hallo

    In der WPF arbeitet man mit Binding.
    Schau mal in meine Tutorial (siehe Signatur) hinein und schau mal zum Thema Binding und schau dir DataTemplates an.

    Dann bildest du deine Daten (diese Table) als Klasse flache Klasse ab und lädst diese in eine ObservableCollection. Klingt jetzt nach viel ist aber im Grunde gleich erledigt.
    WPF ist nun mal etwas anders und man sollte eigendlich nicht versuchen mit Dingen wie PartLists.LWPPL.Items.Add(row) zu Arbeiten.

    Solltest du noch fragen haben oder jetzt keine Ahnung haben wovon ich rede kannst du mir/uns ja gerne Beispieldaten geben und ich/wir bilden dir das mal grob ab. Aber die Beispiele in den bisher fertigen Tutorials von mir sollten das was du benötigst voll und ganz abdecken.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi sasha,

    ja das ist mir klar mit den bindings, jedoch weiss ich nicht wie ich den table der von SAP kommt zerpflücken soll und diesen dann in den LW laden. Ich weiss ja nichtmal wie er aussieht.. warscheinlich wie ke einfach excel tabelle, bzw listview... ich wüsste nun auch nicht wie ich den table irgendwo reinlasen kann um ihn anzusehen... ob der table spaltennamen hat weiss ich nicht, da ich bisher einfach nur den content ausgelesen habe. Also im grossen und ganzen, habe ich absolut 0 plan wo ich überhaupt anfangen soll :(
    Naja, nicht böse sein. Du bekommt ein COM Object in dein Programm und kannst dieses nicht lesen?
    Und was macht dein code ober? Der liest das Objekt ja aus oder? du hast hier ja daten drinnen oder? DU musst ja wissen was das für Daten sind und diese lesen können.

    Wir wissen es ganz sicher nicht. Sorry.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    nana bin ich ned, nur deine videos helfen mir dabei nicht, da ich es einfach nicht verstehe... also genauere erläuterung...

    wenn ich in Winforms das RFC auslese kommt Wert für Wert nach einandere... bsp:
    RFC:

    Spalte1 Spalte2 Spalte3 Spalte4
    Wert1 Wert2 Wert3 Wert4
    Wert5 Wert6 Wert7 Wert8

    Wenn ich nun die o.g. For each schleife laufen lasse, bekomme ich:

    Wert1, Wert2, Wert3, Wert4, Wert5, Wert6, Wert7, Wert8

    Deswegen habe ich, da die werte der spalte1 eindeutige eigenschaften hat, entweder 6 oder 7 Zeichen und einen "." ein abfrage eingebaut, dass das LW eine neue Zeile beginnt um sozusagen die Tabelle zu erstellen. Ich wusste nicht wie ich es anderst machen sollte.

    Nun, ich bekomme nun das SAP RFC in ein Object geladen... mein PRoblem ist derzeit, wie kann ich dieses Object an den LW binden und editieren, dass es richtig angezeigt wird. ich weiss einfach nicht wo ich "anfangen" soll...

    Ich binde derzeit die WPF sachen per Code, so wie du es in deinem Tutourial gezeigt hast, sofern ich keine Daten von dritten programmen benötige.

    Die alternative ist, vllt, dass ich das SAP Object in ein Dataset lade und es in eine DataGRid anzeigen lasse. Jedoch wäre mir LW lieber...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „r0tzi“ ()

    Hallo

    Ja, das passt ja auch. Du kannst also die Daten in einer ForEach durchlaufen und soweit auch identifizieren wann quasi ein neuer Datensatz beginnt.
    Passt. Das ist schon mal gut.

    Jetzt füllst du eine Klasse mit diesen Daten und Bindest diese an ein Control wie in meinen Tuts zu sehen ist.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    z.b. hier: Tutorialreihe <WPF lernen/>

    Aber ich kann dir ja gerne Hilfestellung geben. Aber die Basics sollten schon vorhanden sein.

    Fang erstmal mit etwas an was mal nix mit WPF zu tun hat. Erstelle eine Klasse mit Eigenschaften (Properties). Für jeden "Wert" den du da reinbekommst in deiner Schleife eines.
    Im Durchlauf erstellst du immer eine Instanz dieser Klasse und füllst die Properties mit den Werten, anschliessend fügst du diese einer List(Of deineKlasse) oder einer ObservableCollection(Of deineKLasse) hinzu.
    Dann hast du mal eine Collection wo jeder Eintrag einen Eintrag deines ListViews darstellt. Diese Collection Bindest du an eine ListView und wenn du dann noch ein hübschen DataTemplate erstellst sieht das auch noch gut aus.

    Wie gesagt, das verlinkte Beispiel zeigt im Grunde das vorgehen, aber eben nur die Funktionsweise, du musst eben das Beispiel auf deinen Fall umsetzen. Also ist hier verstehen angesagt und nicht einfach nur nachmachen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @r0tzi habe ich dich nun verschreckt?

    Brauchst du wo Hilfe? Solltest du wo nicht klar kommen sags ruig, dafür ist ein Forum da.

    Ich kann dir jetzt kein Beispiel mit deinen Daten machen da ich diese nicht habe, ist aber ja auch nicht nötig weil du ja oben zeigst wie du diese Ausliest, also kannst du dies ja.
    Und sobald du die Daten hast füllst du Klasseninstanzen damit.

    Falls du hier irgendwo hängst kannst du dich ja gerne melden. Das wird schon.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    alles gut, mein problem ist, ich verstehe es einfach noch nicht... ich muss mich da einfach mal richtig reinarbeiten.. um ehrlich zu sein, der aufwand den listview zu füllen mit mvvm und den bindings ist meisstens mehr als per code ^^... aber ja wpf ist nunmal so... ich arbeite dran .. aber wenn du grad da bist, vllt kannst du mir eine andere frage beantworten.. wenn ich das fenster als auflösung auf 1600x900 habe und meine controls plaziert sind, nun stelle ich auf fenster maximize, dann hat die form immernoch 1600x900 , aber die controls füllen die form nicht mehr aus.
    bei forms gabs da ja Fill... bei wpf gibt es ja dieses center damit die controls mit dem grid mitwachsen, nur der grid wächst dann nicht.. also der grid und das controll füllt die form nicht aus. Wenn ich workingarea auslese und es anhand dem grösser mache geht es, aber wenn mein 2ter bildschirm eine andere auflösung hat, stimmt es wieder nicht. wie löse ich das am besten?
    Hallo

    Man merkt das du meine Tutorials nicht verfolgt hast.
    Stelle mal den XAML hier ein. Dann kann ich sehen was du meinst.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    nein, hab nur das angeschaut was ich gebraucht habe oder brauchen hätte können :D
    aber du hast recht, sollte mir mal alle zu gemüte führen

    hier ganz einfaches beispiel, sobald ich die form grösser mache, geht es nicht mit

    Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:WpfApp1"
    7. mc:Ignorable="d"
    8. Title="MainWindow" Height="450" Width="800">
    9. <Grid>
    10. <TabControl HorizontalAlignment="Left" Height="419" VerticalAlignment="Top" Width="792">
    11. <TabItem Header="TabItem">
    12. <Grid Background="#FFE5E5E5">
    13. <Button Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75"/>
    14. <Button Content="Button" HorizontalAlignment="Left" Margin="10,35,0,0" VerticalAlignment="Top" Width="75"/>
    15. <ListBox Height="381" Margin="105,10,0,0" Width="681"/>
    16. </Grid>
    17. </TabItem>
    18. <TabItem Header="TabItem">
    19. <Grid Background="#FFE5E5E5"/>
    20. </TabItem>
    21. </TabControl>
    22. </Grid>
    23. </Window>

    Hallo

    r0tzi schrieb:

    nein, hab nur das angeschaut was ich gebraucht habe oder brauchen hätte können

    Das ist schon mal schlecht. Du befasst dich hier mit etwas neuem ohne vorher nachzusehen wie das überhaupt funktioniert.

    Schon in den ersten Kapiteln erkläre ich wie man der Designer verwendet und das die WPF dynamisch ist und man NIE mit fixen Werten Arbeiten sollte (Width, Height, Margin usw.)
    PS: In WPF ist es ein Window, kein Form.

    Mach mal so:

    XML-Quellcode

    1. <Grid>
    2. <TabControl>
    3. <TabItem Header="TabItem">
    4. <Grid Background="#FFE5E5E5">
    5. <Grid.ColumnDefinitions>
    6. <ColumnDefinition Width="100"/>
    7. <ColumnDefinition Width="*"/>
    8. </Grid.ColumnDefinitions>
    9. <StackPanel Margin="5,3">
    10. <StackPanel.Resources>
    11. <Style TargetType="{x:Type Button}">
    12. <Setter Property="Margin" Value="5"/>
    13. </Style>
    14. </StackPanel.Resources>
    15. <Button Content="Button"/>
    16. <Button Content="Button"/>
    17. </StackPanel>
    18. <ListBox Grid.Column="1"/>
    19. </Grid>
    20. </TabItem>
    21. <TabItem Header="TabItem">
    22. <Grid Background="#FFE5E5E5"/>
    23. </TabItem>
    24. </TabControl>
    25. </Grid>


    Der Unterschied denke ich ist selbsterklärend.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Toll.

    Das rechne ich dir hoch an. Du verschliesst dich zumindest nicht vor etwas neuem und bist bereit Zeit hierfür zu investieren.
    Ich denke die ersten Kapitel hast du schnell durch und dann wird dir das ganze gleich viel klarer.

    Und wenn doch Fragen auftauchen ist dieses Forum ja da. Bzw. auch der SupportThread zu den Tutorials.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##