fastreport.net设计模板保存到数据库
新学C#,尝试用我写Delphi的架构方式,写一个简单架构出来,写到打印功能时,习惯去下载跟delphi一样的打印控件fastreport,其他打印预览什么的都没问题,唯独那个保存事件找不到用那个控件,网络上查找了很多,都写得太过复杂,看着完全懵逼状态,不太适合新手,后面找了很久才找到方法,首先在打印模块拖入Report和environmentSettings两个控件,打印预览代码
private void toolStripButton6_Click(object sender, EventArgs e)
{
int index = dataGridView.CurrentCell.RowIndex;
if (dataGridView.Rows[index].Cells["ReportItem"].Value.ToString() == "")
{
MessageBox.Show("没有打印模板!", "软件提示");
}
else {
byte[] ReportBytes = (byte[])dataGridView.Rows[index].Cells["ReportItem"].Value;
MemoryStream Stream = new MemoryStream(ReportBytes);
rp.Load(Stream);
rp.RegisterData(ds);
rp.Show();
rp.Dispose();
}
}
打印模板我放在dataGridView里面所有从那里面获取,进入设计模板代码
private void dataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
int index = dataGridView.CurrentCell.RowIndex;
if (dataGridView.Rows[index].Cells["ReportItem"].Value.ToString() == "")
{
rp.RegisterData(ds);
rp.Design();
}
else {
byte[] ReportBytes = (byte[])dataGridView.Rows[index].Cells["ReportItem"].Value;
MemoryStream Stream = new MemoryStream(ReportBytes);
rp.Load(Stream);
rp.RegisterData(ds);
rp.Design();
}
}
双击模板数据进入设计界面
然后是保存模板到数据库
private void environmentSettings1_CustomSaveDialog(object sender, OpenSaveDialogEventArgs e)
{
int index = dataGridView.CurrentCell.RowIndex;
using (MemoryStream stream = new MemoryStream())
{
//保存
DataBase mydate = new DataBase();
rp.Save(stream);
if (mydate.Conn.State == ConnectionState.Closed)
{
mydate.Conn.Open();
}
mydate.Cmd.CommandType = CommandType.Text;
mydate.Cmd.CommandText = "update t_Report set ReportItem=@ReportItem where ReportID=@ReportID";
mydate.Cmd.Parameters.AddWithValue("@ReportItem", stream.ToArray());
mydate.Cmd.Parameters.AddWithValue("@ReportID", dataGridView.Rows[index].Cells["ReportID"].Value.ToString());
mydate.Cmd.ExecuteNonQuery();
}
}
放在environmentSettings的CustomSaveDialog事件里面就可以把模板保存到数据库了