Autor Beitrag
coolace
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Mo 19.04.10 20:07 
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 ?

ausblenden 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

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
tatic class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1()); //hier kommt die Meldung
        }
    }
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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"


Zuletzt bearbeitet von JüTho am Di 20.04.10 17:45, insgesamt 1-mal bearbeitet
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 20.04.10 17:44 
RTF ist ein spezielles Dateiformat, siehe:
Zitat:
For the RTF codes, see "rich text format (RTF) Specification, version 1.6" in the MSDN library at msdn.microsoft.com/library.

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: 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