2013-04-13 3 views
11

Je suis nouveau chez wpf et je veux stocker les données de la zone de texte enrichi avec son formatage (italique, coloré, gras ..) dans une base de données (Mysql). Actuellement, lorsque je sauvegarde les données, le formatage est ignoré. en outre, il montre tout le texte dans la même ligne quand je le charge dans la boîte de texte riche de la base de données. Dans l'attente de votre aide et de vos suggestions!Stockage des données de la zone de texte enrichi dans la base de données avec formatage

public void save() 
    { 

     MySqlConnection conn = new MySqlConnection(connString); 
     MySqlCommand command = conn.CreateCommand();  
     string richText = new TextRange(rt1.Document.ContentStart, rt1.Document.ContentEnd).Text; 

     string s = WebUtility.HtmlEncode(richText); 
     command.Parameters.AddWithValue("@s", s);   
     command.CommandText = "insert into proc_tra (procedures) values (@s)"; 
     conn.Open(); 
     command.ExecuteNonQuery(); 
     conn.Close(); 
    } 

public void load() 

    { MySqlConnection conn = new MySqlConnection(connString); 
     MySqlCommand command = conn.CreateCommand(); 
     command.CommandText = "select * from proc_tra where id_pt=4"; 
     rt1.Document.Blocks.Clear();    
     conn.Open();    
     MySqlDataReader dr; 
     dr = command.ExecuteReader(); 
     string k="";   
     while (dr.Read()) 
     {    
      k += dr["procedures"].ToString(); 
     } 
     var p = new Paragraph(); 
     var run = new Run(); 
     run.Text = WebUtility.HtmlDecode(k); 
     p.Inlines.Add(run); 
     rt1.Document.Blocks.Add(p); 
    } 
+0

espoir [this] (http://www.codeguru.com/columns/dotnettips/article.php/c7529/Saving-Rich-Edit-Control-Text-to-SQL-Server.htm) aide – Pyromancer

Répondre

20

Pour obtenir le texte formaté qui sera enregistré dans le db:

string rtfText; //string to save to db 
TextRange tr = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd); 
using (MemoryStream ms = new MemoryStream()) 
{ 
    tr.Save(ms, DataFormats.Rtf); 
    rtfText = Encoding.ASCII.GetString(ms.ToArray()); 
} 

Pour restaurer le texte formaté récupéré à partir du db:

string rtfText= ... //string from db 
byte[] byteArray = Encoding.ASCII.GetBytes(rtfText); 
using (MemoryStream ms = new MemoryStream(byteArray)) 
{ 
    TextRange tr = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd); 
    tr.Load(ms, DataFormats.Rtf); 
} 

Vous pouvez également utiliser le format XAML à la place, à l'aide DataFormats.XAML lors du chargement d'une sauvegarde.

+3

Merci beaucoup! Cela fonctionne comme un charme ^^ –

+0

Travail de travail cher, montre richtextbox n'a aucune définition appelée Document. –

+1

@SharadAg. C'est pour WPF, pas WinForms. – TEK

0

Essayez quelque chose comme ceci:

RichTextBox richTextBox = new RichTextBox(); 
string richText = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd).Text; 

Puis, quand allez enregistrer à MySQL, vous pouvez construire votre requête comme ceci:

string query = "INSERT INTO blah VALUES ('" + HTTPUtility.HtmlEncode(richText) + "'); 

Cela garantira que votre contenu reste formaté correctement.

Enfin lorsque vous effectuez votre sélection pour charger le contenu de nouveau dans la RichTextBox prendre la chaîne que vous obtenez et utilisez:

HTTPUtility.HtmlDecode(selectedDataFromMySQL); 

ou, plus complètement:

richTextBox.Document.Blocks.Clear(); 
richTextBox.Document.Blocks.Add(new Paragraph(HTTPUtility.HtmlDecode(selectedDataFromMySQL); 

Bien que je n'ai pas fait cela depuis un moment, je crois qu'il y a une extension pour le WPF et le contrôle qui inclut une propriété Text, ce qui peut s'avérer utile aussi.

+0

thx pour la réponse mais 'HttpUtility' n'existe pas dans le contexte actuel même si j'ajoute system.web –

+0

J'ai ajouté une référence à System.Web et utilisé en utilisant System.Web mais ne fonctionne toujours pas –

+0

Assurez-vous que votre projet ne cible pas l'un des les structures de profil client dans les propriétés de votre projet. –

Questions connexes