您的位置:首页 > 编程语言 > C#

用c#中的RichTextBox实现图文格式编排存储和格式化显示

2011-12-28 11:05 316 查看
    最近做项目要求把一个数据库查询出来的文章按格式进行显示,包括字体大小和颜色等格式等,开始使用很多方法,在RichTextBox总不能显示字体大小、图片等格式信息,后来想到了RichTextBox可以把rtf格式的文档进行格式化显示,在此启发下,我把rtf数据保存问数据流,再在数据库中以blob类型保存,结果成功了,先分享给大家。

//保存函数

private void button1_Click(object sender, EventArgs e)

        {

            NameInfo nameInfo = new NameInfo();

            nameInfo.name = this.comboBox1.Text;

            System.IO.MemoryStream mstream = new System.IO.MemoryStream();

            this.richTextBox1.SaveFile(mstream, RichTextBoxStreamType.RichText);

            //将流转换成数组

            byte[] bWrite = mstream.ToArray();

            nameInfo.info = bWrite;

            if (DbAccess.Create(nameInfo))

            {

                this.Close();

            }

            else

            {

                MessageBox.Show("创建失败");

            }

        }

//数据库存储函数

 public static bool Create(NameInfo nameInfo)

        {

            try

            {

                using (SQLiteConnection conn = new SQLiteConnection(sConn))

                {

                    

                    conn.Open();

                    SQLiteCommand cmd = conn.CreateCommand();

                    cmd.CommandText = "INSERT INTO nameInfor(name,infor) VALUES(@name,@infor);";

                    cmd.Parameters.Add(new SQLiteParameter("name", nameInfo.name));

                    cmd.Parameters.Add(new SQLiteParameter("infor", nameInfo.info));

                    int i = cmd.ExecuteNonQuery();

                    return i == 1;

                }

            }

            catch (Exception)

            {

                //Do any logging operation here if necessary

                return false;

            }

        }

//查询并显示函数

private void button2_Click(object sender, EventArgs e)

        {

            EditForm editForm = new EditForm();

            NameInfo nameInfo=DbAccess.GetByName(this.comboBox1. Text);

            byte[] bWrite = (byte[])nameInfo.Info;

            //将数组转换成stream

            System.IO.MemoryStream mstream = new System.IO.MemoryStream(bWrite, false);

            //将stream填充到RichTextBox

           editForm.richTextBox1.LoadFile(mstream, RichTextBoxStreamType.RichText);

           editForm.Show();

        }

//查询数据库的函数

 public static NameInfo GetByName(string name)

        {

            try

            {

                using (SQLiteConnection conn = new SQLiteConnection(sConn))

                {

                    conn.Open();

                    SQLiteCommand cmd = conn.CreateCommand();

                    cmd.CommandText = "SELECT * FROM nameInfor WHERE name=@name;";

                    cmd.Parameters.Add(new SQLiteParameter("name", name));

                    SQLiteDataReader dr = cmd.ExecuteReader();

                    if (dr.Read())

                    {

                        NameInfo nameInfo = new NameInfo();

                        nameInfo.name = dr.GetString(0);

                        nameInfo.info = System.Text.Encoding.Default.GetBytes(dr.GetString(1));

                        return nameInfo;

                    }

                    else

                        return null;

                }

            }

            catch (Exception)

            {

                //Do any logging operation here if necessary

                return null;

            }

        }

    }

     希望对大家有用!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息