Entwickler-Ecke
WinForms - Databinding
coolace - Mo 19.04.10 20:07
Titel: Databinding
Hy,
ich versuch seit Tagen folgendes hinzubekommen. Ich möchte mittels
Databinding eine Dataview an eine Richtextbox binden und hierbei
die RTF funktion nutzen. Die normale Databindung mit der Eigenschaft
Text funktioniert einwandfrei aber das mit RTF nicht, was mach ich falsch ?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| DataColumn datcolum; DataRow datrow; DataView datview = new DataView(); try {
datcolum = new DataColumn(); datcolum.DataType = System.Type.GetType("System.String"); datcolum.ColumnName = "Spalte1"; datcolum.ReadOnly = false; datcolum.Unique = false; datcolum.Caption = "Spalte1"; dattable.Columns.Add(datcolum);
datrow = dattable.NewRow(); datrow["Spalte1"] = dslist[0].MeinText; dattable.Rows.Add(datrow);
datview = datset.Tables["Daten"].DefaultView;
rtfausgabe.DataBindings.Add("Rtf", datview, "Spalte1"); } catch (Exception) { } |
Nach dem starten kommt die Meldung: Ungültiges Dateiformat, siehe Kommentar
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| tatic class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } |
JüTho - Mo 19.04.10 20:15
Nach der SDK-Doku/MSDN/Hilfe scheint das korrekt zu sein. Dort wird ausdrücklich erwähnt, dass die Rtf-Eigenschaft für DataBinding geeignet ist.
Woran merkst du denn, dass es nicht funktioniert? Das ist schließlich keine besonders hilfreiche Problembeschreibung.
Jürgen
coolace - Mo 19.04.10 20:18
sorry, weiß nicht wie ich das am besten beschreiben soll.
Ich merke das indem ich mein Projekt starte und
vom Compiler Ungültiges Dateiformat zurückbekomme,
und zwar direkt am Einstiegspunkt, siehe den 2 Auszug
aus dem Quelltext. Was mach ich falsch ?
Kha - Mo 19.04.10 21:36
Klicke mal im Exception-Dialog auf "Details", zumindest den Namen der Exception-Klasse und den Stacktrace bräuchten wir.
JüTho - Mo 19.04.10 21:58
Sorry, dass ich die Fehlermeldung überlesen und nur den ersten Code-Auszug beachtet hatte.
Diese Meldung deutet darauf hin, dass in dslist[0].MeinText kein gültiger Rtf-Code steht. Der gängigste Fehler ist, dass die geschweiften Klammern nicht passen oder "\rtf" fehlt.
Jürgen
/Edit: "\rtf" statt "/rtf"
Kha - Mo 19.04.10 22:40
Hmpf, die Exception war natürlich nicht im MSDN eingetragen :gruebel: .
Reflector gibt dir Recht: Die ArgumentException wird ausgelöst, wenn der String nicht mit {\rtf anfängt.
coolace - Di 20.04.10 17:32
Vielen Dank schon mal für die vielen Antworten.
Momentan Habe ich eine Klasse Fahrzeug, wo ich händisch
die Daten über die Member hinzufügen, siehe Codebeispiel.
C#-Quelltext
1: 2: 3: 4: 5:
| Fahrzeug datensatz;
datensatz = new Daten(); datensatz.Fahrzeugtyp= "Volve"; dslist.Add(datensatz); |
Später soll das dann automatisch änderbar sein durch das Databinding
der Dataview an die Richtextbox.
Wie bekomme ich das genau hin, muss ich dann hier datensatz.Fahrzeugtyp= "Volve"; abändern
auf datensatz.Fahrzeugtyp= "/rtf Volve";?
Gruß
Coolace
JüTho - Di 20.04.10 17:44
RTF ist ein spezielles Dateiformat, siehe:
Offensichtlich (wie Sebastian geprüft hat) muss das, was der Rtf-Eigenschaft zugewiesen wird, diesem Format entsprechen. Das geht nicht, indem du einfach etwas wie "/rtf Volve" schreibst; sondern es muss beispielsweise so aussehen:
Zitat: |
{\rtf1\ansi\ansicpg1252\deff0\deftab709{\fonttbl{\f0\fnil\fcharset0 Nimbus Mono L;}}
{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\lang1033\f0\fs20 Sun Microsystems, Inc. Binary Code License Agreement \par} |
Jürgen
coolace - Di 20.04.10 17:52
Ok, das habe ich nun kapiert das wenn die Rtf Eigenschaft
aufgerufen wird dort intern ein Code mit den ganzen Informationen
wie Farbe, Schriftart ... übergeben wird wie
C#-Quelltext
1: 2:
| {\rtf1\ansi\ansicpg1252\deff0\deftab709{\fonttbl{\f0\fnil\fcharset0 Nimbus Mono L;}} {\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\lang1033\f0\fs20 Sun Microsystems, Inc. Binary Code License Agreement \par} |
kommt etwas anderes wie ein normaler String ohne diese ganzen Metainfos gibt er
logischerweise eine Exception aus da dies was er erwartet hier nicht kommt.
Soweit so gut, bloß wie kann ich dann mein Problem mit der Datenbindung der Dataview
an meine Richttextbox lösen ?
Kha - Di 20.04.10 19:54
Indem du normalen Text an Text und RTF-Text an Rtf bindest :nixweiss: . Mir ist nicht klar, was du genau vorhast.
coolace - Di 20.04.10 21:31
Ich habe momentan folgendes Problem, über meine Klasse Fahrzeug erzeuge ich
ein neues Objekt datensatz, dieses hat den Member Fahrzeugtyp. Der Member
ist in der Klasse als String definiert.
Ich übergebe meiner Dataview diesen Wert in die Spalte 1, wie unten beschrieben.
Danach binde ich die Dataview an die Richtextbox.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| datcolum = new DataColumn(); datcolum.DataType = System.Type.GetType("System.String"); datcolum.ColumnName = "Spalte1"; datcolum.ReadOnly = false; datcolum.Unique = false; datcolum.Caption = "Spalte1"; dattable.Columns.Add(datcolum);
datrow = dattable.NewRow(); datrow["Spalte1"] = dslist[0].MeinText; dattable.Rows.Add(datrow);
datview = datset.Tables["Daten"].DefaultView;
rtfausgabe.DataBindings.Add("Rtf", datview, "Spalte1"); |
Während der Programmierung ging ich bis jetzt davon aus das die
Richttextbox anhand des Databindings den String als Rft übernimmt
da ich ihm ja sage es soll Rft sein und anders kann ich ja nicht
auf die Richtextbox mittels Databinding nicht zugreifen. Nun hab
ich herausgefunden, dank der zahlreichen Hilfe, das meine Denkweise
falsch ist und er hier schon vorher Rtf erwartet. Mein Problem ist
wie ich den bisherigen normalen Text in Rtf Convertieren kann damit mein Programm
fehlerlos startet.
Danke und Gruß
Coolace
coolace - Mi 21.04.10 19:12
Ich hab das Problem gelöst, ich hab den ersten
Datensatz einer Richtextbox mit der .Text Eigenschaft
übergeben und beim erstellen des Objekts mit .RFT abgerufen.
Der Rest passiert dann automatisch.
Danke für die Hilfe
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!