我这里有一个奇怪的问题。我正在尝试创建一个表单,当从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格式代码)。
我只是无法弄清楚为什么在第二种情况下它不能正确接受字符串。这对我来说毫无意义。有人可以帮忙吗?
答案 0 :(得分:0)
我想如果您尝试以纯文本格式显示输出,则输出为:@"{\rtf1\ansi\ Test}
这意味着当您想要显示直接从数据库格式化的此字符串时,您将传递它"@"{\rtf1\ansi\ Test}""
而不是正确的格式。我建议您在数据库中存储没有@的格式,只显示结果。