将数据库中的格式化数据显示到richtextbox
本文关键字:显示 richtextbox 格式化数据 数据库 | 更新日期: 2023-09-27 18:22:35
我制作了一个程序,可以使用richtextbox将格式化的(更改字体、大小和颜色)数据添加到我的MS Access数据库中,还有一个普通的文本框来存储主题,当你点击列表框中的主题时,它会加载到列表框中,它应该在另一个richtextbox中显示格式化的文本,它完美地显示了纯文本,但只要用格式化的文本点击主题,它就会显示文本的格式:
{'rtf'ansi'ansicpg 1252'deflang7177{'f0'fnil'fcharset 0 Microsoft Sans serif;}}
{'colortbl;'red0'green255'blue128;}
'viewkind4'uc 1'pard'cf1'fs17 now'cf0'par
}
我的代码:
private void listItem_SelectedIndexChanged(object sender, EventArgs e)
{
string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:'Temp'SumWizz.accdb";
OleDbConnection conn = new OleDbConnection(connstring);
string query = "SELECT * FROM Items WHERE Name = '" + listItem.Text + "'";
OleDbCommand cmd = new OleDbCommand(query, conn);
OleDbDataReader reader;
try
{
conn.Open();
reader = cmd.ExecuteReader();
// reads the data and fills the combo box and listbox
while (reader.Read())
{
string Sdetail = reader.GetString(2);
richItem.Text = Sdetail;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
conn.Close();
}
我已将richItem(我的richtextbox)更改为richItem.rtf=详细信息;然后它完美地显示了格式化的文本,但当主题选择为纯文本时,它说格式无效,我必须在另外两个地方使用它。我可以先检查文本是否具有rtf属性,或者通过任何其他方式使其同时显示纯文本和格式化文本吗?
Rich文本似乎总是以{'rtf
开头(我可能错了。但这似乎是一个合理的假设)。所以,如果你检查一下,你就能做出决定。
请参阅此链接,以获得方便的扩展方法。
来自msdn论坛的代码
/// <summary>
/// Returns the DataFormat string of the text.
/// </summary>
/// <param name="text">Text to check.</param>
/// <returns>Value from the <see cref="DataFormats"/> enumeration.</returns>
public static string GetDataFormat(this string text)
{
// First validate the text
if (string.IsNullOrEmpty(text)) return System.Windows.DataFormats.Text;
// Return right data
if (text.StartsWith(@"{'rtf")) return System.Windows.DataFormats.Rtf;
// Return default
return System.Windows.DataFormats.Text;
}
用法:
var format = myString.GetDataFormat();
if (format == System.Windows.DataFormats.Rtf)
{
// process RTF text
}
else
{
// process plain text
}