我是wpf的新手,我想将富文本框的数据及其格式(Italic,Colored,Bold ..)存储到数据库(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);
}
答案 0 :(得分:22)
获取将保存在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加载保存。
答案 1 :(得分:0)
尝试这样的事情:
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) + "');
这将确保您的内容保持正确格式化。
最后,当您执行select以将内容加载回RichTextBox时,请使用您获得并使用的字符串:
HTTPUtility.HtmlDecode(selectedDataFromMySQL);
或更完整:
richTextBox.Document.Blocks.Clear();
richTextBox.Document.Blocks.Add(new Paragraph(HTTPUtility.HtmlDecode(selectedDataFromMySQL);
虽然我自己有一段时间没有这样做,但我相信WPF和包含Text属性的控件有一个扩展,因此也可能有用。