私は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);
}
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);
}
保存の読み込み時にDataFormats.XAMLを使用して、代わりにXAML形式を使用することもできます。
このようなものを試してください:
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プロパティを含むコントロールの拡張機能があり、同様に役立つことがあると思います。