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

来源:互联网 发布:上市公司财务报表数据 编辑:程序博客网 时间:2024/06/11 21:28
    最近做项目要求把一个数据库查询出来的文章按格式进行显示,包括字体大小和颜色等格式等,开始使用很多方法,在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;
            }
        }
    }


     希望对大家有用!


原创粉丝点击