web-dev-qa-db-fra.com

Stockage des données de zone de texte enrichi dans une base de données avec formatage

Je suis nouveau sur wpf et je souhaite stocker les données de la zone de texte enrichi ainsi que son formatage (italique, coloré, gras, ..) dans une base de données (Mysql). est ignoré. En outre, il affiche tout le texte de la même ligne lorsque je le charge dans la zone de texte enrichi de la base de données. Dans l’attente de votre aide et de vos suggestions!

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);
    }
12
Amine Da.

Pour obtenir le texte formaté qui sera enregistré dans la base de données:

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é extrait de la base de données:

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, en utilisant DataFormats.XAML lors du chargement d’une sauvegarde.

22
buylar

Essayez quelque chose comme ça:

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

Ensuite, quand vous allez l'enregistrer dans MySQL, vous pouvez construire votre requête comme ceci:

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

Cela garantira que votre contenu reste correctement formaté.

Enfin, lorsque vous effectuez votre sélection pour charger le contenu dans la RichTextBox, prenez 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 ne l'aie pas fait moi-même depuis un moment, je pense qu'il existe une extension pour WPF et le contrôle qui inclut une propriété Text, ce qui peut s'avérer utile également.

0
Timothy Randall