Подтвердить что ты не робот

Хранение данных из текстового поля в базу данных с форматированием

Я новичок в wpf, и я хочу хранить данные из богатого текстового поля вместе с его форматированием (курсив, цветной, жирный шрифт..) в базу данных (Mysql). в настоящее время, когда я сохраняю данные, форматирование игнорируется. кроме того, он отображает весь текст в той же строке, когда я загружаю его обратно в богатое текстовое поле из базы данных. Ждем ваших предложений и предложений!

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);
    }
4b9b3361

Ответ 1

Чтобы получить форматированный текст, который будет сохранен в 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());
}

Чтобы восстановить форматированный текст, извлеченный из 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);
}

Вместо этого вы можете использовать формат XAML, используя DataFormats.XAML для загрузки сохранения.

Ответ 2

Попробуйте что-то вроде этого:

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

Затем, когда вы собираетесь сохранить его в MySQL, вы можете построить свой запрос следующим образом:

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

Это гарантирует, что ваш контент будет отформатирован правильно.

Наконец, когда вы выполняете выбор, чтобы загрузить содержимое обратно в RichTextBox, возьмите строку, которую вы получаете и используете:

HTTPUtility.HtmlDecode(selectedDataFromMySQL);

или, более полно:

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

Хотя я и не делал этого некоторое время самостоятельно, я считаю, что есть расширение для WPF и элемента управления, которое включает свойство Text, которое может оказаться полезным также.