html text in datagrid binden... wie geht das?

  • WPF

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

    html text in datagrid binden... wie geht das?

    Hallo Leute, und danke fürs reinschauen...

    ich bekomme aus der Datenbank einen html Text und möchte es gern so darstellen, wie es sein sollte. Es steht in meiner Tabelle sowas:
    WIG-Schweißmaschine <div class="ExternalClassAA8C817257A748C1A768F600321BA77E"><p>Hersteller XY<br>Inventarnummer: </p><p>Verleihfähig</p></div>

    Kann mir jemand weiterhelfen, wie ich es so binden kann, dass es gut aussieht...

    Danke.
    Hallo

    HTML ist HTML und nicht XAML.
    Insofern solltest du die Text in einem Webbrowser-Control "rendern".

    Wenn direkt über Binding (was bei dem Control out of the box nicht geht) dann benötigt man einen Behavior.

    VB.NET-Quellcode

    1. public static class BrowserBehavior
    2. {
    3. public static readonly DependencyProperty HtmlProperty = DependencyProperty.RegisterAttached(
    4. "Html",
    5. typeof(string),
    6. typeof(BrowserBehavior),
    7. new FrameworkPropertyMetadata(OnHtmlChanged));
    8. [AttachedPropertyBrowsableForType(typeof(WebBrowser))]
    9. public static string GetHtml(WebBrowser d)
    10. {
    11. return (string)d.GetValue(HtmlProperty);
    12. }
    13. public static void SetHtml(WebBrowser d, string value)
    14. {
    15. d.SetValue(HtmlProperty, value);
    16. }
    17. static void OnHtmlChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    18. {
    19. WebBrowser wb = d as WebBrowser;
    20. if (wb != null)
    21. wb.NavigateToString(e.NewValue as string);
    22. }
    23. }


    Binding dann wie folgt:

    XML-Quellcode

    1. <WebBrowser lcl:BrowserBehavior.Html="{Binding HtmlToDisplay}" />


    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. ##

    Vielen Dank. Das klappt schon mal....

    Dazu hätte ich noch paar fragen:
    - Kannst du dir erklären, woher so eine komische Ansicht kommt bei der Spalte? Er geht über alles hinweg bis nach unten und bleibt nicht in Rahmen... (Sieh Bild 1)
    - Warum zeigt er mir nicht mehr die Oberfläche an, ob wohl ich alles kompiliert habe und es läuft Einwandfrei (Sieh Bild 2, 3 und 4)

    Jetzt sehe ich meine eigene Oberfläche nicht... Vielleicht kannst Du was zu sagen...
    Bilder
    • Unbenannt.PNG

      32,31 kB, 754×999, 133 mal angesehen
    • Unbenannt1.PNG

      62,41 kB, 1.252×375, 173 mal angesehen
    • Unbenannt2.PNG

      23,46 kB, 673×323, 118 mal angesehen
    • Unbenannt3.PNG

      30,14 kB, 1.472×487, 114 mal angesehen
    Naja, das mit dem Webbrowser-Control ist so ne sache. Das ist irgendwie kein richtiges WPF Control.
    Ich denke du wirst nicht drum rum kommen das selbst zu rendern.

    Ich weis nicht wie komplex der HTML sein kann der da in der DB steht, aber wenn der so einfach ist wie hier dargestelt und es kommt da nix großartiges hinzu würde ich das in ner Richtextbox oder ähnlichem machen.
    Ist sicher die bessere Wahl.

    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. ##

    ​Ich denke du wirst nicht drum rum kommen das selbst zu rendern.

    Würde ich gern machen... wenn ich einen Ansatz hätte...

    ​Richtextbox oder ähnlichem machen.Ist sicher die bessere Wahl.

    Das hätte ich viel lieber. Aber es schien noch komplexer zu sein... Jedenfalls hab ich gestern die ganze Zeit probiert. Hat zu keinem Ergebnis geführt... Hast du irgend wie eine Beispielseite?

    EugenIS schrieb:

    Das hätte ich viel lieber. Aber es schien noch komplexer zu sein...

    Nicht wirklich. Von XCeed gibts ne clevere Richtextbox welches auch Formater hat. Auch eigene Formater lassen sich implementieren, damit solltest du schnell ans gewünschte Ziel kommen.

    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. ##

    Moment... Du sagst das das Beispiel nicht funktioniert und im selben Atenzug wo man das Toolkit herbekommt?

    Wenn du das Toolkit nicht hast kann das Beispiel ja gar nicht funktionieren oder?
    Binde das XCeed Toolkit via NuGet ein und wende das Beispiel laut verlinkter Seite an.

    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. ##

    Aber das ist doch alles in dem Link hinterlegt.
    Auf GitHub ist der Link zum NuGet-Paket.

    Dieses einbinden und gut ists.

    EugenIS schrieb:

    er kennt kein Feld Text

    Was "text". Wo steht da was von Text??
    Gehe bitte die anleitung nochmals durch. Namespace einbinden und dann eine RichtTextBox einfügen. Anschliessend den Formatter angeben.
    Wenn du einen eigenen Formetter erstellen willst dann eine Klasse in einem passenen Namespace anlegen welche ITextFormatter implementiert.

    Ansonsten, wenn du nicht weiterkommst wäre eine genauere Beschreibung WO du hängst vieleicht hilfreicher.

    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. ##

    Irgend wie funktioniert es nicht... (Sieh Bild 1)

    Muss ich den ITextFormater nicht irgend wo im WPF als Converter angeben oder so? Hab das Gefühl da springt irgend ein Converter nicht an...
    Bilder
    • Unbenannt.PNG

      19,22 kB, 434×590, 105 mal angesehen
    • Unbenannt1.PNG

      36,32 kB, 939×548, 115 mal angesehen
    • Unbenannt2.PNG

      22,45 kB, 772×392, 115 mal angesehen
    Hallo

    NOCHMALS wie im Link (der auch von dir verlinkt wurde) gezeigt musst du in XAML auch den Formatter angeben.

    XML-Quellcode

    1. <toolkit:RichTextBox x:Name="_richTextBox" Grid.Row="1" Margin="10" BorderBrush="Gray" Padding="10"
    2. Text="{Binding Notes}"
    3. ScrollViewer.VerticalScrollBarVisibility="Auto">
    4. <toolkit:RichTextBox.TextFormatter>
    5. <myCustomFormatter:MyFormatter />
    6. </toolkit:RichTextBox.TextFormatter>
    7. </toolkit:RichTextBox>


    Frage (nicht böse gemeint): Guckst du nur die Bildchen oder liest du das auch?

    PS: return new TextRange(document.ContentStart, document.ContentEnd).Text; ist nur die da um zu zeigen was zurückgegeben werden muss.
    Du musst da natürlich eine eigene Logik reinbringen um das von dir gewünschte Ergebnis zu erzielen. Musst also den HTML parsen. Klar oder?


    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, leider immer noch nicht ganz klar... Wäre mir alles klar, hätte ich hier kein Thema für eröffnet... Kann doch nicht so schwer jetzt sein so ein html text da rein zu prügeln... Wie dem auch sei...

    der GetText und SetText wird jetzt aufgerufen... Sieht immer noch so aus, wie es halt aussieht (sieh Bild 1)

    Was muss ich den jetzt damit machen?

    EugenIS schrieb:

    GetText und SetText wird jetzt aufgerufen... Sieht immer noch so aus, wie es halt aussieht (sieh Bild 1)

    OK, das ist gut. Also hast du deinen Formatter mal integriert. Nun musst du den Formatter anpassen.

    Im Moment gibst du ja immer das zurück was drinnen steht. Also wie wenn du KEINEN Formatter hast.
    Nun musst du hergehen und aus dem HTML Quellcode ein TextRange Object machen so das es der Richtextbox "genehm" ist.

    Ein kleines Beispiel: Dort wo <br/> im Quelltext vorkommt musst du einen \n oder ein Paragraph Object dazwischen einfügen.

    EugenIS schrieb:

    Wäre mir alles klar, hätte ich hier kein Thema für eröffnet


    Mittlerweile gehts aber schon um was ganz anderes.

    Du musst eben damit rumprobieren und im endeffekt den HTML Quellcode in der GetText Methode in ein XAML wandeln. Dafür gibt es zig verschiedene möglichkeiten und/oder Bibliotheken.

    Ich habe das gerade mal selbst probiert. KLappt ja ganz gut: (Um HTML in XAML zu wandeln habe ich eine Bibliothek verwendet)
    Bilder
    • HTMLtoRTB.PNG

      65,49 kB, 789×989, 107 mal angesehen
    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. ##

    EugenIS schrieb:

    Wenn ich das alles per Hand mache, dann hätte ich mir den ganzen Stress auch sparen können...

    Jetzt pass mal auf Eugen. Das DU keine Fragen beantworten kannst und diese schlichtweg ignorierst kannst du MICH nun nicht verantwortlich machen.

    Nofear23m schrieb:

    Ich weis nicht wie komplex der HTML sein kann der da in der DB steht, aber wenn der so einfach ist wie hier dargestelt und es kommt da nix großartiges hinzu würde ich das in ner Richtextbox oder ähnlichem machen.
    Ist sicher die bessere Wahl.

    Keine Antwort. Ich frage ja nicht zum spaß. Selbst schuld.

    Mal abgesehen davon habe ich geschrieben (ja, sogar im letzten Post) das es Bibliotheken gibt, oder fertig Quellcode wie in meinem Fall. Ich habe für das Beispiel (welches ziemlich viel HTML in XAML wandeln kann) ca. 3 Minuten benötigt. Ich habe dir wirklich versucht zu helfen und dich auf den richtigen Weg zu bringen, was soll ich noch alles machen.
    HTML ist KEIN XAML. Pasta. Will man das wandeln benötigt es eben umwege. Ich kann auch meinem Audi auch nicht so einfach einen Mercedes machen oder umgekehrt. Ist nun mal so.

    Jetzt so zu tun als hättest du durch meine Hilfestellung auch noch Stress ist doch wohl die Härte. Du liest dir Links oder Dokus zu Bibliotheken nicht mal durch und machst andere verantwortlich? Echt jetzt.

    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. ##

    Mensch, zwei Post nach meiner Frage, habe ich dir sogar Bilder hochgeladen wo jeder drin sieht was genau ich suche und wissen will...

    Du musst ruhiger werden wenn es mal nicht so läuft wie du es dir Vorstellst. Ich finde insgesamt ist der Forum wesentlich langweiliger geworden wie vor deiner Zeit. Früher haben sich auch die Anfänger viel mehr getraut. Heute traut sich kaum ein Experte was reinzuschreiben und eine Frage beantworten... Aber dem gegenüber bist du durch deine Arroganz einfach Blind. Und komm mir bitte jetzt nicht mit "oh, da hat mal ErfinderDesRades auch mal was gepostet." Dem kannst du in keiner weise das Wasser reichen. Er kennt sich sehr gut aus, und kann es auch sehr gut vermitteln. Es kommt eben nicht drauf an ob du ein Überflieger bist oder nicht. Es kommt auf dem Umgang mit einander an und wie man es vermittelt. Gleichgesinnte zu finden, die sich für Programmierung interessieren. Achte selbst bei der Gelegenheit mal drauf, wie viele beantworten überhaupt noch die Fragen. Wo sind die alle? Es waren einige dabei, die ich mittlerweile sehr vermisse. Mag sein, dass die nicht das drauf hatten was du so kannst. Aber man hat deren Antworten sehr geschätzt. Dann kamst du. Jetzt läuft es so ab, dass wenn man eine Frage stellt am ende raus liest, wie dämlich doch alle sind und du alleine der Superwisser bist. Mich würde es nicht wundern, wenn du irgend wann den Forum für dich alleine hast. Aber ist die Welt alleine wirklich so schön? Endlich keine Staus, keine Warteschlangen, keiner der einen Stört oder nervt. Ist doch super...

    Ich kann es nicht beurteilen, wie gut das ankommt was du bei Youtube und in deinen Büchern postest. Dennoch wage ich daran zu zweifeln ob du ein Guter Lehrer bist. Den einen guten Lehrer zeichnet in erster Linie Geduld, Hingabe und die Energie seine "Schüler" zu motivieren weiter zu machen, auch wenn es mal nicht klappt. Du hast es innerhalb von kurzer Zeit genau den gegenteil in einem Forum hinbekommen. Dabei bist du auch noch Super-Moderator. Naja.
    Klar, das ist deine Meinung und die respektiere ich. Es ist auch in der Tat so das ich dir gegenüber feindsehliger bin als anderen gegenüber, die Gründe hierfür habe ich dir aber in diversen Themen von dir genannt.
    Was ICH in einem Forum sicher nicht machen werde ist Code auf einem Silbertablett servieren. Ich schätze eigeninitiative und das sich die Personen auch Links ansehen welche man Postet und dem Nachgehen und mal versuchen das zu verstehen. Ich Helfe jedem gerne der Hilfe auch annimmt. Ich mach das eben nach dem Motto. "Gib einem Mann einen Fisch und du ernährst ihn einen Tag, lerne ihm Fischen und du ernährst ihn ein ganzes Leben".
    Wer das nicht will hat den Sinn eines Forums nicht verstanden - finde ICH zumindest. Gut, vieleicht ist es auch ein Fehler von mir, davon auszugehen das jemand mit über 900 Beiträgen ein gewisses Grundwissen hat und Links mit Beschreibungen korrekt anwenden kann - das mag sein, oft ist es recht schwer einzuschätzen wie weit jemand in einem Bereich ist. Ist nun mal so.

    Das ich auch in diesem Thread versucht habe zu Helfen zeigen die Posts, das kannst du nicht bestreiten denke ich.

    Ob ich ein guter Lehrer bin oder nicht ist mir eigentlich auch egal. Ich mach mein Ding und wem es nicht gefällt der muss nicht reinsehen. Auch habe ich mit @ErfinderDesRades überhaupt kein Problem falls du das meinst und ich denke er mit mir auch nicht, wenn wir über etwas diskutieren dann sachlich, und ich habe bereits sehr viel von ihm lernen können, auch schon lange vor diesem Forum übrigens.

    Ich habe dir oben gezeigt das es relativ einfach (ich weis schon, was für den einen einfach ist , ist für den anderen nicht so einfach) möglich ist HTML in einer RTB darzustellen. Du hast ja nicht mal gefragt welche Lib ich verwende um HTML in XAML zu wandeln. Vermutlich willst du es auch nicht wissen sonst hättest du gefragt.

    Aber ich komme deinem Wunsch sehr gerne nach und werde mich aus deinen Threads raushalten, dann hast du mich vom Hals.
    Wenn du der Meinung bist das das Forum durch mich schlechter wird/wurde und/oder du meinst das ich hier fehl am Platz bin kannst du dies gerne anderen Moderatoren melden.

    In diesem Sinne wünsche ich dir viel Erfolg und viel spass hier - andere können dir sicher besser Helfen.

    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. ##