/ / Przechowywanie danych w polu tekstowym do bazy danych z formatowaniem - c #, mysql, wpf, database, richtextbox

Przechowywanie danych w polu tekstowym do bazy danych z formatowaniem - c #, mysql, wpf, database, richtextbox

Jestem nowy w wpf i chcę przechowywać danepole tekstowe wraz z jego formatowaniem (kursywa, kolorowe, pogrubione ..) w bazie danych (Mysql). obecnie, gdy zapisuję dane, formatowanie jest ignorowane. dodatkowo pokazuje cały tekst w tym samym wierszu, gdy ładuję go z powrotem do pola tekstowego z bazy danych. Czekamy na twoją pomoc i sugestie!

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

Odpowiedzi:

20 dla odpowiedzi nr 1

Aby uzyskać sformatowany tekst, który zostanie zapisany w bazie danych:

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());
}

Aby przywrócić sformatowany tekst pobrany z bazy danych:

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

Możesz także użyć formatu XAML zamiast, używając DataFormats.XAML po wczytaniu zapisu.


0 dla odpowiedzi nr 2

Spróbuj czegoś takiego:

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

Następnie, przechodząc do zapisania go w MySQL, możesz zbudować swoje zapytanie w następujący sposób:

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

Zapewni to, że treść pozostanie poprawnie sformatowana.

Na koniec, po wybraniu, aby załadować zawartość z powrotem do RichTextBox, pobierz ciąg znaków i użyj:

HTTPUtility.HtmlDecode(selectedDataFromMySQL);

lub, bardziej kompletnie:

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

Chociaż nie robiłem tego od jakiegoś czasu, uważam, że istnieje rozszerzenie dla WPF i formantu, który zawiera właściwość Text, co może okazać się również użyteczne.