凯云水利水电工程造价系统 (四) 配合比单价模块
2015-06-01 19:45
429 查看
凯云水利水电工程造价系统 (四) 配合比单价模块
3.6-1功能实现
配合比单价的数据处理有:添加、批量修改、从定额导入、删除、复制、粘贴、导入、导出、配合比单价的添加、批量修改、删除:点击添加会出现一个窗体,里面有相应的字段进行添加。批量修改 (如图3-3),选中要修改的数据,然后点击批量修改按钮,系统会自动的把选中的数据加载到相应的datagrid中,
把填好的了的数据录入到要修改的数据中,然后进行保存。也可以进行批量删除。
配合比单价从定额导入,在列表中选择需要导入的混凝土配合比。
配合比单价的复制、粘贴:对现有的数据进行复制、粘贴,为了进行区分,粘贴后的数据,代号会自动跟着”复制“二字,如果某条数据时再次复制、粘贴,那代号会重复出现”复制“二字。
配合比单价的导入、导出:系统将自动给出一个路径,把材料的单价的所有数据导入到一张Excel表。导入:先手动填写一些数据,这些数据要根据数据库的参数来写,一一对应才能导入到人工单价表中。
配合比单价明细的数据处理有:添加、删除、替换、复制、粘贴、计算
配合单价明细的添加、删除:添加之前编辑好的材料组成列表(图3-4)。选中相应的数据,进行删除。
配合比单价明细的替换、复制、粘贴:对选中的配合比单价进行替换。对现有的数据进行复制、粘贴,为了进行区分,粘贴后的数据,代号会自动跟着”复制“二字,如果某条数据时再次复制、粘贴,那代号会重复出现”复制“二字。
(图 1)
3.6-2 表和关系
配合比单价模块所涉及到的表:SN | 資料表 | 描述 |
16 | SYS_BuildProjectList | 建立项目表 |
33 | SYS_MixPricecomposeList | 导入配合比组成表 |
34 | SYS_MixProportionClassesList | 配合比分类列表 |
35 | SYS_MixProportionPriceDetailList | 配合比单价组成明细表 |
36 | SYS_MixProportionPriceLeadList | 导入配合比单价表 |
37 | SYS_MixProportionPriceList | 配合比单价表 |
48 | SYS_QuoteEditionList | 定额表 |
資料表名稱 | SYS_BuildProjectList | 資料表描述 | ||||
SN | 欄位 | 資料型態 | 長度 | null | PK | 描述 |
1 | BuildProjectID | int identity | (10, 0) | NO | PK | 建立项目ID |
2 | BuildProjectName | nchar | 150 | YES | 建立项目名称 | |
3 | QuoteEditionID | int | (10, 0) | YES | 外键 | 定额建立ID |
資料表名稱 | SYS_MixPricecomposeList | 資料表描述 | ||||
SN | 欄位 | 資料型態 | 長度 | null | PK | 描述 |
1 | MixPricecomposeID | int identity | (10, 0) | NO | PK | 导入配合比单价组成ID |
2 | MaterialCode | nchar | 50 | YES | 材料代号 | |
3 | Name | nchar | 50 | YES | 名称 | |
4 | Unit | nchar | 50 | YES | 单位 | |
5 | Amout | decimal | (18, 3) | YES | 数量 | |
6 | MixProportionPriceLeadID | int | (10, 0) | YES | 外键 | 导入配合比单价ID |
資料表名稱 | SYS_MixProportionClassesList | 資料表描述 | ||||
SN | 欄位 | 資料型態 | 長度 | null | PK | 描述 |
1 | MixProportionClassesID | int identity | (10, 0) | NO | PK | 配合比单价分类ID |
2 | MixProportionClassesName | nchar | 150 | YES | 配合比单价分类名称 | |
3 | MixProportionClassesFur_ID | int | (10, 0) | YES | 配合比单价分类fur_ID |
資料表名稱 | SYS_MixProportionPriceDetailList | 資料表描述 | ||||
SN | 欄位 | 資料型態 | 長度 | null | PK | 描述 |
1 | MixProportionPriceDetailID | int identity | (10, 0) | NO | PK | 配合比单价明细ID |
2 | Code | nchar | 150 | YES | 代号 | |
3 | Unit | nchar | 150 | YES | 单位 | |
4 | BudgetPrice | nchar | 150 | YES | 预算价格 | |
5 | QuoteAmout | nchar | 150 | YES | 定额数量 | |
6 | MixProportionPriceID | int | (10, 0) | YES | 配合比单价ID | |
7 | Total | nchar | 150 | YES | 总价 | |
8 | Name | nchar | 50 | YES | 名称 |
資料表名稱 | SYS_MixProportionPriceLeadList | 資料表描述 | ||||
SN | 欄位 | 資料型態 | 長度 | null | PK | 描述 |
1 | MixProportionPriceLeadID | int identity | (10, 0) | NO | PK | 导入配合比单价ID |
2 | MudMixerCode | nchar | 50 | YES | 混泥土代号 | |
3 | Name | nchar | 100 | YES | 名称 | |
4 | Unit | nchar | 50 | YES | 单位 | |
5 | StrengthXGrade | nchar | 50 | YES | 强度等级 | |
6 | CementStrength | nchar | 50 | YES | 水泥强度 | |
7 | MixProportionClassesID | int | (10, 0) | YES | 配合比单价分类ID |
資料表名稱 | SYS_MixProportionPriceList | 資料表描述 | ||||
SN | 欄位 | 資料型態 | 長度 | null | PK | 描述 |
1 | MixProportionPriceID | int identity | (10, 0) | NO | PK | 配合比单价ID |
2 | BuildProjectID | int | (10, 0) | YES | 建立项目ID | |
3 | MixProportionPriceName | nchar | 150 | YES | 配合比单价名称 | |
4 | Code | nchar | 150 | YES | 代号 | |
5 | Unit | nchar | 150 | YES | 单位 | |
6 | Remark | nchar | 150 | YES | 备注 | |
7 | Budget | nchar | 150 | YES | 预算单价 |
資料表名稱 | SYS_QuoteEditionList | 資料表描述 | ||||
SN | 欄位 | 資料型態 | 長度 | null | PK | 描述 |
1 | QuoteEditionID | int identity | (10, 0) | NO | PK | 定额ID |
2 | QuoteEditionName | nchar | 150 | YES | 定额名称 | |
(图 2)
3.6-3模块功能的具体实现
3.6-3.1配合比单价模块功能分解
3.6-3.1.1 配合比单价3.6-3.1.1.1 添加
(1)可以手动添加配合比单价,点击添加按钮,弹出添加配合比窗体,代号是自定生成的:
(图 3)
//自动增加单号 var Code=0; function oddnumbers(){ //把这个方法放在添加按钮的点击事件里 $('#tianjia').window('open'); //当点击添加时,添加配合比窗体就打开 $.getJSON("/PeiHeBiDanJia/oddnumbers/", function (data) { Code= data[0].oddnumbers; var t="HD"+ Code; $('#Code').val(t); //把获取的代号赋值给名为代号的文本框
(图 4)
(2)输入完数据之后,点击添加配合比单价窗体的添加按钮,所触发的界面层的方法的代码:
//新增配合比单价 function MixProportionPrice_Insert(){ var r=document.getElementById("repeat").checked; //把被选中的多次重复添加的复选框的值赋值给r if (confirm( '是否需要新增?')){ //确定是否需要新增 $.getJSON("/PeiHeBiDanJia/MixProportionPrice_Insert?BuildProjectID="+@Session["项目ID"]+"&" +"MixProportionPriceName="+$('#Name').val()+"&" +"Code="+$('#Code').val()+"&" +"Unit="+$('#Unit').val()+"&" +"Remark="+$('#Remark').val()+"&" +"Budget="+$('#Price').val(), function(data){ if (data >0){ $.getJSON("/PeiHeBiDanJia/BindingMixProportionPrice?BuildProjectID="+@Session["项目ID"], //重新查询配合比单价的代码 function(data){ $('#w配合比单价表').datagrid('loadData', data); alert("新增成功!"); //新增成功之后,如果复选框被选中,则继续留在当前的窗体,并清空文本框的值 if(r){ $('#tianjia').window('open'); $('#Name').val(""); $('#Code').val(""); $('#Unit').val(""); $('#Remark').val(""); $('#Price').val(""); oddnumbers(); //自动增加代号的方法 } else{ $('#tianjia').window('close'); //如果不需要重复添加,则关闭当前窗体 } }); } else{ alert("新增失败!"); } }); } } //自动增加代号 var Code=0; function oddnumbers(){ $('#tianjia').window('open'); $.getJSON("/PeiHeBiDanJia/oddnumbers/", function (data) { Code= data[0].oddnumbers; var t="HD"+ Code; $('#Code').val(t); }); }
//自动增加代号 var Code=0; function oddnumbers(){ $('#tianjia').window('open'); $.getJSON("/PeiHeBiDanJia/oddnumbers/", function (data) { Code= data[0].oddnumbers; var t="HD"+ Code; $('#Code').val(t); }); }
(3)把新增的数据传到控制器的代码:
#region 配合比单价的新增 public ContentResult MixProportionPrice_Insert(int BuildProjectID, string MixProportionPriceName, string Code, string Unit, string Remark, string Budget) { DataTable DT = myMixProportionPrice.MixProportionPrice_Insert(BuildProjectID, MixProportionPriceName, Code, Unit, Remark, Budget); List<Dictionary<string, object>> listReturn = ConvertHelper.DtToList(DT); string i = DT.Rows[0][0].ToString(); return Content(i); } #endregion
(4)把新增的数据传到逻辑层的代码:
#region 配合比单价的新增 public DataTable MixProportionPrice_Insert(int BuildProjectID, string MixProportionPriceName, string Code, string Unit, string Remark, string Budget) { SqlParameter[] mySqlParameter = { new SqlParameter ("@Type",SqlDbType.Char), new SqlParameter ("@BuildProjectID",SqlDbType.Int), new SqlParameter ("@MixProportionPriceName",SqlDbType.Char), new SqlParameter ("@Code",SqlDbType.Char), new SqlParameter ("@Unit",SqlDbType.Char), new SqlParameter ("@Remark",SqlDbType.Char), new SqlParameter ("@Budget",SqlDbType.Char),//要和存储过程中的变量相对应// }; mySqlParameter[0].Value = "MixProportionPrice_Insert";//和数据层的存储过程名相对应 mySqlParameter[1].Value = BuildProjectID; mySqlParameter[2].Value = MixProportionPriceName; mySqlParameter[3].Value = Code; mySqlParameter[4].Value = Unit; mySqlParameter[5].Value = Remark; mySqlParameter[6].Value = Budget; DataTable i = myDALMethod.DAL_SelectDB_Par("MixProportionPrice", mySqlParameter); return i;//返回数据给控制器 } #endregion
(5)把新增的数据传到数据层的SQL语句:
--新增配合比 if @Type='MixProportionPrice_Insert' begin insert SYS_MixProportionPriceList values (@BuildProjectID,@MixProportionPriceName, @Code, @Unit, @Remark, @Budget) SELECT @@IDENTITY End
(6)新增之后的截图:
(图 5)
3.6-3.1.1.2 批量修改
(1)选中你所要修改的数据,然后点击批量修改的按钮,就会出现对数据进行批量修改的窗体:
(图 6)
当点击批量修改的窗体时,就执行绑定数据的方法:
//批量修改 function BatchUpdata(){ var rowss = $('#w配合比单价表').datagrid('getSelected'); //先选中要修改的数据 if(rowss){ //如果选中了,才能执行下面的代码 $('#w批量修改').window('open'); //批量修改的窗体就会打开 var row = $('#w配合比单价表').datagrid('getData'); //获取配合比单价的所有数据 for (var y = 0; y< row.rows.length ; y++) { //对查出来的数据进行循环 var chkXuanZe = "chk" + y; if (document.getElementById(chkXuanZe).checked) { $('#Updata').datagrid("appendRow", { IntMixProportionPriceID:row.rows[y].MixProportionPriceID, StringCode:row.rows[y].Code, StringMixProportionPriceName:row.rows[y].MixProportionPriceName, StringUnit:row.rows[y].Unit, StringBudget:row.rows[y].Budget, StrRemark:row.rows[y].Remark } ); } } ID=1; } else{ alert("请选中要批量修改的数据!"); } }
//复选框 var d=0; function returnBtnColumn(index,data,t) { var XuanZe="chk" +t return '<a onclick=""><input id="'+XuanZe+'" type="checkbox" /></a>'; }
(图 7)
点击数据,把数据绑定到填写配合比单价的文本框里,对要进行修改的数据修改:
然后点击录入数据,就修改完一条数据了:
(图8)
(图9)
//单价一行,进行绑定数据 var PeiHeBiPrice=$('#Updata').datagrid('getSelected'); $("#StringCode").val(PeiHeBiPrice.StringCode); $('#StringName').val(PeiHeBiPrice.StringMixProportionPriceName); $("#StringUnit").val(PeiHeBiPrice.StringUnit); $("#StringPrice").val(PeiHeBiPrice.StringBudget); $('#StringRemark').val(PeiHeBiPrice.StrRemark); }
//录入数据 function EnteringData(){ var row = $('#Updata').datagrid('getData'); //获取datagrid中的所有数据 if (confirm("是否录入?")) { //录入之前,先确定是否进行录入数据 for (var i = 0; i < row.rows.length; i++) { var Check ="ch" +i; if (document.getElementById(Check).checked){ //只有选择数据前的复选框的数据,才能录入数据 $('#Updata').datagrid("updateRow", //对选中的数据进行修改 { index: i, row: { StringCode: $("#StringCode").val(), StringMixProportionPriceName: $('#StringName').val(), StringUnit: $("#StringUnit").val(), StrRemark: $('#StringRemark').val() } }); } } } alert("录入成功!!!"); //录入成功之后,就情况文本框的数据 $("#StringCode").val(""), $('#StringName').val(""), $("#StringUnit").val(""), $("#StringPrice").val(""), $('#StringRemark').val("") }
(3)把数据录入完后,点击确认进行修改:
(图 10)
(图 11)
点击确认按钮时,把修改的数据传到界面层的方法代码:
function XiuGai() var row = $('#Updata').datagrid('getData'); //因为是批量修改,所以要先获取所有修改的数据 for (var i = 0; i < row.rows.length; i++) { //获取完数据之后,就进行循环处理 $.getJSON("/PeiHeBiDanJia/Update_MixProportionPriceList?BuildProjectID=" + @Session["项目ID"] + "&" + "MixProportionPriceName=" + row.rows[i].StringMixProportionPriceName + "&" + "Code=" +row.rows[i].StringCode + "&" + "Unit=" + row.rows[i].StringUnit+ "&" + "Remark=" +row.rows[i].StrRemark + "&" + "Budget=" + row.rows[i].StringBudget+"&" +"MixProportionPriceID="+row.rows[i].IntMixProportionPriceID , function (data) { if (data > 0) { $.getJSON("/PeiHeBiDanJia/BindingMixProportionPrice?BuildProjectID="+@Session["项目ID"], function(data){ $('#w配合比单价表').datagrid('loadData', data); }); } else { } }); } alert("修改成功!"); $('#Updata').datagrid("loadData",{total:0,rows:[]}); $('#w批量修改').window('close'); }
把修改的数据传到控制器的代码:
public ContentResult Update_MixProportionPriceList(string BuildProjectID, string MixProportionPriceName, string Code, string Unit, string Remark, string Budget, string MixProportionPriceID) //参数个数要和逻辑层的个数对应,名字可以不一样 { int i = myMixProportionPrice.Update_MixProportionPriceList(Convert.ToInt32(BuildProjectID), MixProportionPriceName, Code, Unit, Remark, Budget, Convert.ToInt32(MixProportionPriceID)); return Content(i.ToString()); //把值转化成字符串,并返回给界面 } #endregion
逻辑层的方法:
#region 修改配合比单价 public int Update_MixProportionPriceList(int BuildProjectID, string MixProportionPriceName, string Code, string Unit, string Remark, string Budget, int MixProportionPriceID) //逻辑层的参数个数要和数据层的个数对应 { SqlParameter[] mySqlParameter = { new SqlParameter ("@Type",SqlDbType.Char), new SqlParameter ("@BuildProjectID",SqlDbType.Int), new SqlParameter ("@MixProportionPriceName",SqlDbType.Char), new SqlParameter ("@Code",SqlDbType.Char), new SqlParameter ("@Unit",SqlDbType.Char), new SqlParameter ("@Remark",SqlDbType.Char), new SqlParameter ("@Budget",SqlDbType.Char), new SqlParameter ("@MixProportionPriceID",SqlDbType.Int), }; mySqlParameter[0].Value = "Update_MixProportionPrice"; //要和数据层的存储过程名对应 mySqlParameter[1].Value = BuildProjectID; mySqlParameter[2].Value = MixProportionPriceName; mySqlParameter[3].Value = Code; mySqlParameter[4].Value = Unit; mySqlParameter[5].Value = Remark; mySqlParameter[6].Value = Budget; mySqlParameter[7].Value = MixProportionPriceID; int i = myDALMethod.DAL_OPTableDB_Par("MixProportionPrice",mySqlParameter); return i; } #endregion
3.6-3.1.1.3 从定额导入
(1)点击从定额导入的按钮,就会弹出定额导入的窗体:
(图 12)
(1.1)绑定分类列表的下拉树的数据:
界面层的代码:
// 绑定下拉树 function BangDingTree() { $.getJSON("/PeiHeBiDanJia/TreeBangDing", function (data) { $('#treeMix').tree('loadData', data); //把从控制器返回来的值加载到下拉树的节点中 }); }
控制器的方法:
public ActionResult TreeBangDing() { DataTable dt = myMixProportionPrice.BindingTree(); string stringtree = GetDataString(dt, "0"); stringtree = stringtree.Remove(stringtree.Length - 2, 2); return Content(stringtree); } public string GetDataString(DataTable dt, string id) { string stringbuilder = ""; DataView dv = new DataView(dt); dv.RowFilter = "父ID=" + id; DataTable dtChild = dv.ToTable(); if (dtChild.Rows.Count > 0) { stringbuilder += "["; for (int i = 0; i < dtChild.Rows.Count; i++) { string leiid = dtChild.Rows[i]["部门ID"].ToString(); string childstring = GetDataString(dt, leiid); if (childstring.Length > 0) { stringbuilder += "{ \"id\":\"" + dtChild.Rows[i]["部门ID"].ToString() + "\",\"text\":\"" + dtChild.Rows[i]["部门名称"].ToString().Trim() + "\",\"state\":\"closed\",\"children\":"; stringbuilder += childstring; } else { stringbuilder += "{\"id\":\"" + dtChild.Rows[i]["部门ID"].ToString() + "\",\"text\":\"" + dtChild.Rows[i]["部门名称"].ToString().Trim() + "\"},"; } } stringbuilder = stringbuilder.Remove(stringbuilder.Length - 1, 1); stringbuilder += "]},"; } return stringbuilder; }
逻辑层的方法:
#region 树形的绑定 public DataTable BindingTree() { SqlParameter[] mySqlParameter = { new SqlParameter ("@Type",SqlDbType.Char), }; mySqlParameter[0].Value="BindingTree"; DataTable dt=myDALMethod.DAL_SelectDB_Par("MixProportionPrice",mySqlParameter); return dt; } #endregion
数据层的SQL查询语句:
--绑定下拉树 if @Type='BindingTree' BEGIN SELECT MixProportionClassesID as 部门ID, MixProportionClassesName as 部门名称, MixProportionClassesFur_ID AS 父ID FROM SYS_MixProportionClassesList END
(1.2)根据单价分类列表的节点ID来查询配合比单价的导入数据:
(图 13)
界面层的代码:
//选中节点进行查询 function OnClickTreeSelected() { var treeMixID = $('#treeMix').tree('getSelected'); $.getJSON("/PeiHeBiDanJia/SpotTreeSelected?MixProportionClassesID="+ treeMixID.id, //根据节点ID进行查询导入的配合比单价 function (data) { $('#w导入配合比单价').datagrid('loadData', data); } ); }
控制器的代码:
#region 点击下拉树 public ActionResult SpotTreeSelected(int MixProportionClassesID) { DataTable dt = myMixProportionPrice.SpotTreeSelected(MixProportionClassesID); List<Dictionary<string, object>> listReturn = ConvertHelper.DtToList(dt); return Json(listReturn, JsonRequestBehavior.AllowGet); } #endregion
逻辑层的代码:
#region 点击下拉树 public DataTable SpotTreeSelected(int MixProportionClassesID){ SqlParameter [] mySqlParameter={ new SqlParameter("@Type",SqlDbType.Char), new SqlParameter("@MixProportionClassesID",SqlDbType.Int), }; mySqlParameter[0].Value="SpotTreeSelected"; mySqlParameter[1].Value=MixProportionClassesID; DataTable dt=myDALMethod.DAL_SelectDB_Par("MixProportionPrice",mySqlParameter); return dt; } #endregion
数据层的SQL查询语句:
--点击下拉树 if @Type='SpotTreeSelected' begin SELECT MixProportionPriceLeadID, MudMixerCode, Name, Unit, StrengthXGrade, CementStrength, MixProportionClassesID FROM SYS_MixProportionPriceLeadList where MixProportionClassesID=@MixProportionClassesID --根据下拉树的节点来查询配合比单价的 end
选中要导入的配合比单价,相应的配合比组成会自动处来,这时点击左上角的保存按钮,进行到导入:
(图 14)
(图 15)
点击保存按钮,所触发的界面层的方法的代码:
//导入定额数据 function LeadData(){ var MixProportionPriceLead=$('#w导入配合比单价').datagrid('getSelected'); //要先选中导入配合比单价的一行数据 var d=$('#w配合比组成').datagrid('getData'); if(MixProportionPriceLead){ if(confirm('是否需要导入此数据?')){ $.getJSON("/PeiHeBiDanJia/MixProportionPrice_Insert?BuildProjectID="+@Session["项目ID"]+"&" +"MixProportionPriceName="+MixProportionPriceLead.Name+"&" +"Code="+MixProportionPriceLead.MudMixerCode+"&" +"Unit="+MixProportionPriceLead.Unit+"&" +"Remark="+"..."+"&" +"Budget="+"0", function(data){ if (data>0){ BindingMixProportionPrice(); for(var i=0;i<d.rows.length;i++){ $.getJSON("/PeiHeBiDanJia/InsertMixPriceDetail?Code="+$('#w配合比组成').datagrid('getData').rows[i]["MaterialCode"]+"&" +"Unit="+$('#w配合比组成').datagrid('getData').rows[i]["Unit"]+"&" +"BudgetPrice="+"0"+"&" +"MixProportionPriceID="+data+"&" +"Total="+"0"+"&" +"Name="+$('#w配合比组成').datagrid('getData').rows[i]["Name"]+"&" +"QuoteAmout="+$('#w配合比组成').datagrid('getData').rows[i]["Amout"], function(data){ $.getJSON("/PeiHeBiDanJia/OnclickMixProporDetail?MixProportionPriceID="+MixProportionPriceID.MixProportionPriceID, function(data){ $('#w配合比明细').datagrid('loadData', data); }); }); } } }); alert("导入成功!"); $('#w从定额导入配合比').window('close'); } else{ alert("您已放弃导入此数据!"); } } else{ alert("请选中要导入的数据!"); } }
导入成功后的截图:
(图 16)
3.6-3.1.1.4 删除
(1)对于配合比单价的删除(可以选择多条数据进行删除)
(图 17)
界面层的代码:
//删除配合比 function Delete_MixProportionPrice(){ var MixProportionPrice=$('#w配合比单价表').datagrid('getData'); //首先要查询出配合比单价的所有数据 if (confirm('是否需要删除此数据?')){ //进行确认是否要删除 for(var i=1;i<MixProportionPrice.rows.length+1;i++){ //把获取出的数据进行循环 var chkXuanZe = "chk" + i; var y=i-1; if(document.getElementById(chkXuanZe).checked) { $.getJSON("/PeiHeBiDanJia/Delete_MixProportionPrice?MixProportionPriceID="+MixProportionPrice.rows[y].MixProportionPriceID, function(data){ if (data>0){ $.getJSON("/PeiHeBiDanJia/BindingMixProportionPrice?BuildProjectID="+@Session["项目ID"], function(data){ $('#w配合比单价表').datagrid('loadData', data); } ); alert("删除成功!"); } }); } } } ID=0; }
把删除的值传到控制器的代码:
#region 删除人工单价 public ContentResult Delete_MixProportionPrice(int MixProportionPriceID) { int i = myMixProportionPrice.Delete_MixProportionPrice(MixProportionPriceID); return Content(i.ToString()); } #endregion
逻辑层的代码:
#region 删除配合比单价 public int Delete_MixProportionPrice(int MixProportionPriceID) { SqlParameter[] mySqlParameter = { new SqlParameter ("@type",SqlDbType.Char), new SqlParameter ("@MixProportionPriceID",SqlDbType.Int), }; mySqlParameter[0].Value = "Delete_MixProportionPrice"; mySqlParameter[1].Value = MixProportionPriceID; int i = myDALMethod.DAL_OPTableDB_Par("MixProportionPrice",mySqlParameter); return i; } #endregion
数据层的SQL语句:
--删除配合比单价 if @Type='Delete_MixProportionPrice' begin delete SYS_MixProportionPriceList where MixProportionPriceID=@MixProportionPriceID end
3.6-3.1.1.5 复制
(1)对现有的配合比单价进行复制,但是 预算单价必须改为0:
(图 18)
界面层的代码:
//复制 var CopyCode=""; var CopyMixProportionPriceName=""; var CopyUnit=""; var CopyBudget=""; var CopyRemark=""; //设置为全局变量 var FuZhi=0; function Copy(){ var MixProportionPrice=$('#w配合比单价表').datagrid('getSelected'); if (MixProportionPrice){ if(confirm('是否需要复制此条数据?')){ //如果执行的复制这个方法,就把1赋值给变量FuZhi FuZhi=1; CopyCode=MixProportionPrice.Code.trim(); CopyMixProportionPriceName=MixProportionPrice.MixProportionPriceName.trim(); CopyUnit=MixProportionPrice.Unit.trim(); CopyBudget=MixProportionPrice.Budget.trim(); CopyRemark=MixProportionPrice.Remark.trim(); //获取要复制的数据 alert("复制成功!"); } else{ alert("已放弃复制此数据!"); } } else{ alert("亲,请先选中数据哦"); } }
3.6-3.1.1.6 粘贴
(图 19)
复制成功之后,就点击粘贴:
function Paste(){ var MixProportionPrice=$('#w配合比单价表').datagrid('getSelected'); var y=CopyCode; var t=y.length; var e=y.substring(t-2,t); var tr=CopyCode+"_复制"; var i=tr.length; var d=tr.substring(i-3,i); if(FuZhi==1){ //只有先执行了复制,才能进行粘贴 if(MixProportionPrice){ if(confirm("需要粘贴这条数据吗?")){ if (e=="_复制"){ var Code=tr+"-_复制" $.getJSON("/PeiHeBiDanJia/MixProportionPrice_Insert?BuildProjectID="+@Session["项目ID"]+"&" +"MixProportionPriceName="+CopyMixProportionPriceName+"&" +"Code="+Code+"&" +"Unit="+CopyUnit+"&" +"Remark="+CopyRemark+"&" +"Budget="+"0", function(data){ BindingMixProportionPrice(); alert("粘贴成功,数据已经在最后一行"); }); } else{ alert(tr); $.getJSON("/PeiHeBiDanJia/MixProportionPrice_Insert?BuildProjectID="+@Session["项目ID"]+"&" +"MixProportionPriceName="+CopyMixProportionPriceName+"&" +"Code="+tr+"&" +"Unit="+CopyUnit+"&" +"Remark="+CopyRemark+"&" +"Budget="+CopyBudget, function(data){ BindingMixProportionPrice(); alert("粘贴成功,数据已经在最后一行"); }); } } else{ alert("已放弃粘贴"); } } else{ alert("请先复制!"); } } else{ //如果没有进行复制,就点击粘贴,就会提醒你先复制 alert("请先复制!"); } }
3.6-3.1.1.7 导出
(1)对所有的配合比单价进行导出功能:
(图 20)
控制器的代码:
function daoru() { window.location.href = "/PeiHeBiDanJia/DownloadFile?BuildProjectID="+@Session["项目ID"]; } 控制器的代码: #region 导出配合比单价 public FileResult DownloadFile(int BuildProjectID) { DataSet ds = new DataSet(); DataTable dt = myMixProportionPrice.BindingMixProportionPrice(BuildProjectID); NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName); } for (int i = 0; i < dt.Rows.Count; i++) { NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { rowtemp.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString().Trim()); } } System.IO.MemoryStream ms = new System.IO.MemoryStream(); book.Write(ms); ms.Seek(0, SeekOrigin.Begin); return File(ms, "application/vnd.ms-excel", "导出.xls"); } #endregion
逻辑层的代码:
#region 绑定配合比单价 public DataTable BindingMixProportionPrice(int BuildProjectID) { SqlParameter[] mySqlParameter = { new SqlParameter ("@Type",SqlDbType.Char), new SqlParameter ("@BuildProjectID",SqlDbType.Int), }; mySqlParameter[0].Value = "BindingMixProportionPrice"; mySqlParameter[1].Value = BuildProjectID; DataTable dt = myDALMethod.DAL_SelectDB_Par("MixProportionPrice",mySqlParameter); return dt; } #endregion
数据层SQL查询语句:
--绑定配合比单价 if @Type='BindingMixProportionPrice' begin SELECT MixProportionPriceID, BuildProjectID,ltrim(rtrim(MixProportionPriceName)) as MixProportionPriceName,ltrim(rtrim(Code))as Code,ltrim(rtrim(Unit))as Unit,ltrim(rtrim(Remark)) as Remark , Budget FROM SYS_MixProportionPriceList where BuildProjectID=@BuildProjectID end
(图 21)
3.6-3.1.1.8 导入
(1)导入一些数据到配合比单价datagrid中:
(图 22)
界面层的方法:
<form action="/PeiHeBiDanJia/GetTableFromExcel" method="post" enctype="multipart/form-data"> <text>选择上传文件</text> <input name="file1" type="file" id="file" /> <input type="submit" name="Upload" value="导入" /> </form>
控制器的代码:
#region 导入 public ActionResult GetTableFromExcel() { try { HttpPostedFileBase fostField = Request.Files["file1"]; Stream streamfile = fostField.InputStream; HSSFWorkbook hssfworkbook = new HSSFWorkbook(streamfile); using (NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(0)) { DataTable table = new DataTable(); IRow headerRow = sheet.GetRow(0); int cellCount = headerRow.LastCellNum; int rowCount = sheet.LastRowNum; for (int i = headerRow.FirstCellNum; i < cellCount; i++) { DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); table.Columns.Add(column); } for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++) { IRow row = sheet.GetRow(i); DataRow dataRow = table.NewRow(); if (row != null) { for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j) != null) dataRow[j] = GetCellValue(row.GetCell(j)); } } table.Rows.Add(dataRow); } for (int i = 0; i < table.Rows.Count; i++) { myMixProportionPrice.MixProportionPrice_Insert(Convert.ToInt32(table.Rows[i][0]), table.Rows[i][1].ToString(), table.Rows[i][2].ToString(), table.Rows[i][3].ToString(), table.Rows[i][4].ToString(), table.Rows[i][5].ToString()); //调用逻辑层的方法(通过参数进行传参) } } return Content(""); } catch { return Content(""); } } private static string GetCellValue(ICell cell) { if (cell == null) return string.Empty; switch (cell.CellType) { case CellType.BLANK: return string.Empty; case CellType.BOOLEAN: return cell.BooleanCellValue.ToString(); case CellType.ERROR: return cell.ErrorCellValue.ToString(); case CellType.NUMERIC: case CellType.Unknown: default: return cell.ToString(); case CellType.FORMULA: try { HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook); e.EvaluateFormulaCell(cell); return cell.ToString(); } catch { return cell.NumericCellValue.ToString(); } } } #endregion
逻辑层的方法:
#region 配合比单价的新增 public DataTable MixProportionPrice_Insert(int BuildProjectID, string MixProportionPriceName, string Code, string Unit, string Remark, string Budget) { SqlParameter[] mySqlParameter = { new SqlParameter ("@Type",SqlDbType.Char), new SqlParameter ("@BuildProjectID",SqlDbType.Int), new SqlParameter ("@MixProportionPriceName",SqlDbType.Char), new SqlParameter ("@Code",SqlDbType.Char), new SqlParameter ("@Unit",SqlDbType.Char), new SqlParameter ("@Remark",SqlDbType.Char), new SqlParameter ("@Budget",SqlDbType.Char), }; mySqlParameter[0].Value = "MixProportionPrice_Insert"; mySqlParameter[1].Value = BuildProjectID; mySqlParameter[2].Value = MixProportionPriceName; mySqlParameter[3].Value = Code; mySqlParameter[4].Value = Unit; mySqlParameter[5].Value = Remark; mySqlParameter[6].Value = Budget; DataTable i = myDALMethod.DAL_SelectDB_Par("MixProportionPrice", mySqlParameter); return i; } #endregion
仅供学习参考,禁止商业用途,否则后果自负!
相关文章推荐
- EXCEL: 数字格式不一样导致VLOOKUP无法正常使用
- Spring MVC的@ResponseBody返回JSON串时Content-Type编码问题
- Android---手动创建线程与GUI线程同步(二)
- Linux--YUM 安装 nginx php mysql
- C#第五次作业:开源项目“网页正文提取”的理解
- 回忆是个陷阱,不小心掉进往事的长河,那些过往的殇,就会把我拖进沼泽
- 织梦返回上一页面
- 2015推荐的Android框架
- github检出方式注意事项
- linux内的正则表达式
- Remove Duplicates from Sorted Array II
- 关于Struts2国际化问题。
- 校验maven配置文件
- 梦入你的世界
- python文件拷贝
- Java和Python使用有道词典制作查单词脚本
- POI--帮助文档
- POI--帮助文档
- Linux网络编程:原始套接字编程及实例分析(3)
- java求职宝典