RichTextBox.RTF不接受从数据库生成的字符串 - C#

时间:2016-01-16 19:08:11

标签: c# rtf

我这里有一个奇怪的问题。我正在尝试创建一个表单,当从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 个答案:

答案 0 :(得分:0)

我想如果您尝试以纯文本格式显示输出,则输出为:@"{\rtf1\ansi\ Test}

这意味着当您想要显示直接从数据库格式化的此字符串时,您将传递它"@"{\rtf1\ansi\ Test}""而不是正确的格式。我建议您在数据库中存储没有@的格式,只显示结果。