使用Access数据库在C#中将粘贴在富文本框中的图像显示到Crystal报表

时间:2016-11-22 05:15:47

标签: c# crystal-reports

我正在使用c#语言在视觉上为Windows应用程序中的学生开发问题纸生成器。现在我们坚持这个问题,我在表单中有一个丰富的文本框,我们可以从Ms word或word pad中粘贴数学二次方程式。现在我想要粘贴的二次方程必须保存在数据库中并且必须显示在水晶报告中。(保存正确使用ole对象但不能在水晶报告中显示)我经历了许多网站和论坛以及许多其他选项,如更改数据类型带备忘录的数据库,文本解释为RTF文本和ole对象,并以字节形式保存方程但尚未得到答案,水晶报告中没有显示从富文本框我尝试使用blob但没有看到任何内容。这里是我的数据库访问:ID =数字,问题=文本,方程= OLE对象(从富文本框保存二次方程式)谢谢,希望很快就会得到答案。

code for saving in database
 byte[] bytes = System.Text.Encoding.UTF8.GetBytes(rtf);
                try{
                    OleDbConnection oldb = new OleDbConnection("connection string");

                    oldb.Open();
                    string query = "insert into table_temp(question , objects , object2) values( @questions , @obj  , @obj2)";
                    OleDbCommand cmd = new OleDbCommand(query, oldb);
                    cmd.Parameters.AddWithValue("@questions", richTextBox1.Text);
                    cmd.Parameters.AddWithValue("@obj", bytes);
                    cmd.Parameters.AddWithValue("@obj2", richTextBox2.Rtf);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("save", "save", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

// code for displaying in report . 


                 DataSet ds_temp = new DataSet();
                 string query_temp = "select * from table_temp "; 
                 OleDbCommand cmd_temp = new OleDbCommand(query_temp, oldb);
                 cmd_temp.ExecuteNonQuery();
                 OleDbDataAdapter adp_temp = new OleDbDataAdapter(cmd_temp);
                 adp_temp.Fill(ds_temp);
                 mathematical_formulla.temp_report obj = new mathematical_formulla.temp_report();
                 ReportDocument rptDoc = new ReportDocument();
                 reportform rpt = new reportform();
                 DataTable dt = new DataTable();
                 dt = ds_temp.Tables[0];
                 obj.SetDataSource(dt);
                 rpt.crystalReportViewer1.ReportSource = obj;
                 rpt.Show();

1 个答案:

答案 0 :(得分:1)

谢谢!!现在我得到了答案,也想分享这个。

首先使用富文本框并使用文字夹

连接它们
richTextBox2.SelectedRtf = Properties.Resources.Document; 

编写Maths公式并反映回RTB,而不是通过以下代码拍摄图片框中的RTB屏幕截图。

 public static Bitmap RtbToBitmap(RichTextBox rtb)
        {
            rtb.Update(); // Ensure RTB fully painted
            Bitmap bmp = new Bitmap(rtb.Width, rtb.Height);
            using (Graphics gr = Graphics.FromImage(bmp))
            {
                gr.CopyFromScreen(rtb.PointToScreen(Point.Empty), Point.Empty, rtb.Size);
            }
            return bmp;
        }

现在图片框中有一个图像并将此图像转换为字节数组并存储在DB中,此等式也将反映到Crystal报告中。

谢谢你