实现目标: 标签套打实现位置可调,可增加不同模板调用,利用数据库存放打印格式
涉及:C# 、SQLSERVER
实现流程如下:
一、数据库创建存放打印模板的表格。
/*标签主表*/
Create table Label_Template
(
JLBH int not null,
BDMC varchar(100) null,
CONSTRAINT PK_Label_Template PRIMARY KEY CLUSTERED (JLBH)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
go
/*标签子表*/
Create table Label_ITEM
(
jlbh int not null,
field_la varchar(20) not null,
top_la varchar(20) default 0 null,
left_la varchar(20) default 0 null,
width_la varchar(20) default 0 null,
height_la varchar(20) default 0 null,
font_size varchar(20) default 0 null,
yxbj bit default 1 null,
CONSTRAINT PK_Label_ITEM PRIMARY KEY CLUSTERED (jlbh,field_la)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
二、实现后,c#界面,用于商品标价签打印。
三、页面代码,自已写吧,不贴了。
四、c#后台代码,因个人水平有限,很少写前台JS,一般涉及JS操作调用,全部C#后调用,
1、C#调用LODOP打印JS代码,传入数据库中保存的坐标,及列表中信息进行打印,通过两个循环套娃,配合LODOP代码,实现动态赋值。
// 下面代码主要是调用LODOP格式的JS代码。
var sb = new StringBuilder();
sb.AppendLine(" var LODOP; //声明为全局变量 ");
sb.AppendLine(" function PrintTable(title) {");
sb.AppendLine(" LODOP = getLodop();");
sb.AppendLine(" LODOP.PRINT_INIT(title);");
sb.AppendLine(" LODOP.SET_PRINT_MODE('PROGRAM_CONTENT_BYVAR', true);");
sb.AppendLine(" CreateAllPages(); "); //取循环值套打分页
sb.AppendLine(" LODOP.PREVIEW(); };");
sb.AppendLine(" function CreateAllPages(){ ");
//这个循环主要是取出要打印的信息,取GRID中字段的信息
int[] selections = grid_bottom.SelectedRowIndexArray;
foreach (int rowIndex in selections)
{
sb.AppendLine(" LODOP.NewPage(); "); //分页
sb.AppendLine(" LODOP.SET_PRINT_MODE('PROGRAM_CONTENT_BYVAR', true);");
// 这个循环主要是取打印格式的信息进行配对,
List<Dictionary<string, object>> newAddedList = grid_Center.GetNewAddedList();
for (int i = 0; i < newAddedList.Count; i++) //一行一行循环
{
int yxbj = Convert.ToInt16(newAddedList[i]["yxbj"]);
string pfield_mc = (newAddedList[i]["field_la"].ToString());
string ptop_la = (newAddedList[i]["top_la"].ToString()) ;
string pleft_la = (newAddedList[i]["left_la"].ToString()) ;
string pwidth_la = (newAddedList[i]["width_la"].ToString()) ;
string pheight_la = (newAddedList[i]["height_la"].ToString());
string pfont_size = (newAddedList[i]["font_size"].ToString());
string zb_label = ptop_la + ',' + pleft_la + ',' + pwidth_la + ',' + pheight_la;
string pTM = "";
if (pfield_mc == "NAME")
{
pTM = (grid_bottom.DataKeys[rowIndex][0]).ToString();
}
if (pfield_mc=="BARCODE")
{
pTM = (grid_bottom.DataKeys[rowIndex][1]).ToString();
}
//。。。加字段实现多维度打印。
sb.AppendLine(" LODOP.ADD_PRINT_TEXT( "+ zb_label +" , '" + pTM + "');");
sb.AppendLine(" LODOP.SET_PRINT_STYLEA(0, 'FontSize', '" + pfont_size + "');");
}
}
sb.AppendLine(" };");
sb.AppendFormat("PrintTable('{0}');", title);
return sb.ToString();
//这段代码可作为方法,返回调用的信息。
2、打印按钮,c# +Fineui 后台调用方式
protected void printdes_Click(object sender, EventArgs e)
{
var title = "测式套打方式1";
PageContext.RegisterStartupScript(GetPrintHtmlJS(title));
//后台调用JS ,上面的那个方法,红色部分是JS方法名
}
3、打印格式保存方法,这个写法个人觉得方便。
protected void grid_savebutton_Click(object sender, EventArgs e)
{
dbpublic dbpub = new dbpublic();
String sql = String.Empty;
SqlConnection conn = dbpub.GetConnDB();
{
conn.Open();
SqlTransaction trans = conn.BeginTransaction(); //开始事务
try
{
using (SqlCommand comm = new SqlCommand(sql, conn))
{
comm.Connection = conn;
comm.Transaction = trans;
List<Dictionary<string, object>> newAddedList = grid_Center.GetNewAddedList();
for (int i = 0; i < newAddedList.Count; i++) //一行一行循环
{
sql = " update Label_ITEM set top_la='{0}',left_la='{1}',width_la='{2}',height_la='{3}',yxbj='{4}',font_size='{5}'";
sql = sql + " where jlbh={6} and field_la='{7}'";
string p0 = (newAddedList[i]["top_la"].ToString());
string p1 = (newAddedList[i]["left_la"].ToString());
string p2 = (newAddedList[i]["width_la"].ToString());
string p3 = (newAddedList[i]["height_la"].ToString());
string p4 = (newAddedList[i]["yxbj"].ToString());
string p5 = (newAddedList[i]["font_size"].ToString());
int p6 = Convert.ToInt16(grid_left.DataKeys[grid_left.SelectedRowIndex][0]);
string p7 = (newAddedList[i]["field_la"].ToString());
sql = string.Format(sql, p0, p1, p2, p3, p4, p5, p6,p7);
comm.CommandText = sql;
comm.ExecuteNonQuery();
}
}
trans.Commit(); //提交事务
}
catch (Exception ex)
{
//myWeb.DAL.Regulation.SysService.WriteLog(ex);写日志
PageBase box = new PageBase();
box.ShowNotify(ex.Message);
trans.Rollback(); //回滚事条
}
finally
{
trans.Dispose(); //释放连接对象资源
conn.Close();
}
}
}
4、打印效果预览
总结,数据库二个表(主从表)存放模板数据,程序打印调用模板打印数据,写法主要面向初学者,希望能对大家有一些帮助。