我这里有一个奇怪的问题 . 我正在尝试创建一个表单,当从ListBox中进行选择时,将从数据库中轮询数据并将其显示在RichTextBox中 . 我需要将数据放在RTF中以进行格式化 .
如果我做这样的事情,它工作正常:
private void SaveListTest_SelectedIndexChanged(object sender, EventArgs e)
{
DescriptionName = Convert.ToString(SaveListTest.SelectedItem);
//CallDescriptionTest();
CallDescriptionTest2();
SaveRichTest.Rtf = DescriptionText;
}
public void CallDescriptionTest2()
{
switch (DescriptionName)
{
case "Test":
DescriptionText = @"{\rtf1\ansi\ Test}";
break;
case "Words":
DescriptionText = @"{\rtf1\ansi\ A really long phrase}";
break;
}
}
在这种情况下,RichTextBox(SaveRichTest)将获取数据并显示它 .
但是,如果我执行类似这样的操作,则数据库中的Description列具有与上面完全相同的输入文件(ex - @“{\ rtf1 \ ansi \ Test}”):
private void SaveListTest_SelectedIndexChanged(object sender, EventArgs e)
{
DescriptionName = Convert.ToString(SaveListTest.SelectedItem);
CallDescriptionTest();
//CallDescriptionTest2();
SaveRichTest.Rtf = DescriptionText;
}
public void CallDescriptionTest()
{
using (SqlConnection con = new SqlConnection(BuildDB))
{
con.Open();
string sql = String.Format("Select * from Abilities where Name = '{0}'", DescriptionName);
SqlCommand oCmd = new SqlCommand(sql, con);
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
DescriptionText = Convert.ToString(oReader["Description"]);
}
con.Close();
}
}
}
这将导致程序崩溃,并出现“文件格式无效”错误 .
我知道文本正确地从数据库中提取,因为如果我将“SaveRichTest.Rtf”更改为“SaveRichTest.Text”,它会正确显示它(尽管显示的是RTF格式代码) .
我只是无法弄清楚为什么在第二种情况下它不能正确接受字符串 . 这对我来说毫无意义 . 有人可以帮忙吗?
1 回答
我想在你尝试以纯文本显示输出的情况下,你的输出是:
@"{\rtf1\ansi\ Test}
这意味着当您想要显示直接从数据库格式化的此字符串时,您将传递它
"@"{\rtf1\ansi\ Test}""
而不是正确的格式 . 我建议您在数据库中存储没有@的格式,只显示结果 .