凯云水利水电造价工程系统 (三) 材料单价模块(1)
凯云水利水电造价工程系统 (三) 材料单价模块(新增)
3.3-3模块功能的具体实现
3.4功能4名称:材料单价
3.4-1功能实现
材料单价包含两个部分:一个是材料分类,一个是材料单价。材料分类的是一个下拉树,可以对其进行新增,删除和修改它的节点。当双击材料分类时,材料单价会出现相应的数据。
材料单价数据处理包括添加、修改、删除、复制、粘贴、导入、导出、还可以隐藏分类列表、显示分类列表。
对于材料单价的导出、导入:系统将自动给出一个路径,把材料单价的所有数据导入到一张Excel表。导入:先手动填写一些数据,这些数据要根据数据库的参数来写,一一对应才能导入到
材料单价的添加、修改、删除:当点击添加按钮时,会弹出一个窗体,里面会有相应的文本框进行填写相应要添加的字段,然后进行保存。修改,对原有的数据进行修改,然后进行保存。删除选中的数据。
材料单价的复制、粘贴:复制现有的数据,复制后的数据代号后会有”复制“两字,进行区分。然后进行粘贴到最后一行。
材料单价的查询分为模糊查询和精确查询:查询分为:根剧代号、名称、名称的首字母查询,当选中方式中的代号,如果不选中模糊先查询,则为精确查询,反之,则为模糊查询。
3.4-1.1 材料单价主图:
3.4-2材料单价表和关系
材料单价表的主要字段有:建立项目ID、材料单价ID、材料单价分类ID、代号、名称、单位、材料原价, 包装费, 运杂费,采购及保管费、运输 保 险费、预算价格、是否主材、业主供材。
运输项目表(Sys_YunShuXiangMuBiao)的主要字段:运输项目ID、材料单价ID、运输项目、费用。
資料表名稱 |
SYS_MaterialPriceList |
資料表描述 |
|||||
SN |
欄位 |
資料型態 |
長度 |
null |
PK |
描述 |
|
1 |
MaterialPriceID |
int identity |
(10, 0) |
NO |
PK |
材料单价ID |
|
2 |
BuildProjectID |
int |
(10, 0) |
YES |
外键 |
建立项目ID |
|
3 |
MaterialPriceClassesID |
int |
(10, 0) |
YES |
外键 |
材料单价分类ID |
|
4 |
Code |
nchar |
150 |
YES |
代号 |
||
5 |
Name |
nchar |
150 |
YES |
名称 |
||
6 |
Unit |
nchar |
150 |
YES |
单位 |
||
7 |
MaterialCostPrice |
decimal |
(18, 3) |
YES |
材料原价 |
||
8 |
PackagingPrice |
decimal |
(18, 3) |
YES |
包装费 |
||
9 |
Fare |
decimal |
(18, 3) |
YES |
运杂费 |
||
10 |
BuyingAndHoldPrice |
decimal |
(18, 3) |
YES |
采购保管费 |
||
11 |
TransferSafeCost |
decimal |
(18, 3) |
YES |
运输保险费 |
||
12 |
BudgetPrice |
decimal |
(18, 3) |
YES |
预算价格 |
||
13 |
IfMainMaterial |
bit |
1 |
YES |
是否主材 |
||
14 |
OwnerSupplyMaterial |
bit |
1 |
YES |
是否供材 |
||
15 |
Pinyincode |
nchar |
10 |
YES |
拼音码 |
||
16 |
effectivityno |
bit |
1 |
YES |
|||
SYS_MaterialPriceClassesList
材料单价分类表的主要字段有:材料单价分类ID、材料单价分类名称、材料单价分类Fur-ID、备注
資料表名稱 |
SYS_MaterialPriceClassesList |
資料表描述 |
|||||
SN |
欄位 |
資料型態 |
長度 |
null |
PK |
描述 |
|
1 |
MaterialPriceClassesID |
int identity |
(10, 0) |
NO |
PK |
材料单价分类ID |
|
2 |
MaterialPriceClassesName |
nchar |
150 |
YES |
材料单价分类名称 |
||
3 |
MaterialPriceClassesFur_ID |
int |
(10, 0) |
YES |
材料单价分类Fur-ID |
||
4 |
Remark |
nchar |
15 |
YES |
备注 |
Sys_YunShuXiangMuBiao
資料表名稱 |
Sys_YunShuXiangMuBiao |
資料表描述 |
|||||
SN |
欄位 |
資料型態 |
長度 |
null |
PK |
描述 |
|
1 |
YunShuXiangMuID |
int identity |
(10, 0) |
NO |
PK |
||
2 |
MaterialPriceID |
int |
(10, 0) |
YES |
材料单价ID |
||
3 |
YunShuXiangMu |
nchar |
100 |
YES |
运输项目 |
||
4 |
FeiYong |
nchar |
100 |
YES |
费用 |
Sys-YunZaFeiBiao
資料表名稱 |
Sys-YunZaFeiBiao |
資料表描述 |
|||||
SN |
欄位 |
資料型態 |
長度 |
null |
PK |
描述 |
|
1 |
YunZaFeiID |
int identity |
(10, 0) |
NO |
PK |
运杂费ID |
|
2 |
YunShuXiangMuID |
int |
(10, 0) |
YES |
外键 |
运输项目ID |
|
3 |
运输起点 |
nchar |
100 |
YES |
运输起点 |
||
4 |
装车费 |
nchar |
150 |
YES |
装车费 |
||
5 |
每公里运费 |
nchar |
100 |
YES |
每公里运费 |
||
6 |
运距 |
nchar |
100 |
YES |
运距 |
||
7 |
系数 |
nchar |
100 |
YES |
系数 |
||
8 |
装载系数 |
nchar |
100 |
YES |
装载系数 |
||
9 |
卸车费 |
nchar |
100 |
YES |
卸车费 |
||
10 |
其它 |
nchar |
100 |
YES |
其它 |
||
11 |
计算公式 |
nchar |
100 |
YES |
计算公式 |
||
12 |
每吨运杂费 |
nchar |
100 |
YES |
每吨运杂费 |
||
13 |
交货地点 |
nchar |
100 |
YES |
交货地点 |
||
14 |
交货条件 |
nchar |
100 |
YES |
交货条件 |
||
15 |
交货等级 |
nchar |
100 |
YES |
交货等级 |
各个表的关系如下:
(图 2)
3.4-3模块功能的具体实现
3.4-3.1 控件的使用
3.4-3.1.1 动态下拉树(tree)
(2)动态下拉树界面代码:
<div id="p" class="easyui-panel" title="材料分类" style="width:220px;height:470px;padding:1px;"data-options="iconCls:'icon-save',closable:true,tools:'#tt'"> <ul id="treMaterial" class="easyui-tree" style="width:140px;height:450px" οndblclick="OnclickSelectTree()" data-options="lines:true,animate:true"></ul></div>
(3)赋值给界面的控件代码:
function BangDingTree() {//自定义方法$.getJSON("/CaiLiaoDanJia/TreeBangDing",//从控制器传来的JSON代码function (data) {$('#treMaterial').tree('loadData', data);//把从控制器传来的数据加载到下拉树中});}
(4)控制器的数据传入到界面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data;
using System.Data.SqlClient;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;//先引用
using System.IO; //先引用namespace 凯云水利水电工程造价系统.Controllers
{public class CaiLiaoDanJiaController : Controller{BLL新建项.CaiLiaoDanJia myCaiLiaoDanJia = new BLL新建项.CaiLiaoDanJia();//实例化逻辑层//// GET: /CaiLiaoDanJia/public ActionResult CaiLiaoDanJia(){return View();//跳转到材料单价的主图}#region 树形绑定public ActionResult TreeBangDing()//自定义控制器的方法,用于界面层的调用{DataTable dt = myCaiLiaoDanJia.BangDingTree();//调用逻辑层的方法string stringtree = GetDataString(dt, "0"); //stringtree = stringtree.Remove(stringtree.Length - 2, 2);//return Content(stringtree);}#endregion#region 树形绑定public string GetDataString(DataTable dt, string id){string stringbuilder = "";DataView dv = new DataView(dt);//声明DataView,把数据赋值给dvdv.RowFilter = "父ID=" + id;//DataTable dtChild = dv.ToTable();//转换成DataTableif (dtChild.Rows.Count > 0)//获取DataTable的行数,如果有数据,就执行下面的代码{stringbuilder += "[";for (int i = 0; i < dtChild.Rows.Count; i++){string leiid = dtChild.Rows[i]["部门ID"].ToString();string chidstring = GetDataString(dt, leiid);if (chidstring.Length > 0){stringbuilder += "{ \"id\":\"" + dtChild.Rows[i]["部门ID"].ToString() + "\",\"text\":\"" + dtChild.Rows[i]["部门名称"].ToString().Trim() + "\",\"state\":\"closed\",\"children\":";//获取逻辑层传来的值,分别 赋值,然后传给界面层stringbuilder += chidstring;}else{stringbuilder += "{\"id\":\"" + dtChild.Rows[i]["部门ID"].ToString() + "\",\"text\":\"" + dtChild.Rows[i]["部门名称"].ToString().Trim() + "\"},";}}stringbuilder = stringbuilder.Remove(stringbuilder.Length - 1, 1);//移除获取出的数据的最后一个字符串stringbuilder += "]},";}return stringbuilder;}#endregion
(5) 逻辑层的数据传入到控制器的代码:
namespace BLL新建项
{public class CaiLiaoDanJia{DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();//首先实例化数据层#region 树形的绑定public DataTable BangDingTree()//自定义逻辑层的方法{SqlParameter[] mySqlParameter ={new SqlParameter("@Type",SqlDbType.Char),};mySqlParameter[0].Value = "BangDingShuXing";//存储过程名DataTable dt = myDALMethod.DAL_SelectDB_Par("CaiLiaoDanJia", mySqlParameter);//把数据库的数据放在 dt 里return dt;//把数据返回给控制器}#endregion
(6)数据层的数据传入到逻辑层的代码:
--树形递归的绑定
if @Type='BangDingShuXing'
begin
SELECT MaterialPriceClassesID AS 部门ID, MaterialPriceClassesName AS 部门名称, MaterialPriceClassesFur_ID AS 父ID // AS 就是把你查出来的数据重新命名
FROM SYS_MaterialPriceClassesList
end
3.4-3.1.2 datagrid
(1)datagrid效果截图
(图 4)
(2)datagrid界面代码:
<table id="w材料单价" class="easyui-datagrid" style="width:1100px;height:389px;padding:0px;" data-options="noheader:true,singleSelect:true,autoRowHeight:false,pagination:true,pageSize:10,rownumbers:true,onClickRow:onClickRowMingXi,onDblClickCell:ShuangJiYunZaFei " >// data-options里面设置的是datagr的属性。singleSelect设置是否单选, onClickRow单击事件<thead><tr><th data-options="field:'BuildProjectID',width:80,hidden:true,align:'center'">建立项目ID</th>// field:列名,用于传参数,而建立项目ID是界面显示的列名<th data-options="field:'MaterialPriceID',width:80,hidden:true,align:'center'">材料单价ID</th><th data-options="field:'MaterialPriceClassesID',width:10,hidden:true,align:'center'">材料单价分类ID</th><th data-options="field:'Code',width:120,align:'center'">代号</th><th data-options="field:'Name',width:120,align:'center'" >名称</th><th data-options="field:'Unit',width:80,align:'center'" >单位</th><th data-options="field:'MaterialCostPrice',width:60,align:'center'" >材料原价</th><th data-options="field:'PackagingPrice',width:80,align:'center'" >包装费</th><th data-options="field:'Fare',width:100,align:'center'" >运杂费</th><th data-options="field:'BuyingAndHoldPrice',width:100,align:'center'" >采购保管费</th><th data-options="field:'TransferSafeCost',width:80,align:'center'" >运输保险费</th><th data-options="field:'BudgetPrice',width:80,align:'center',formatter:formatPrices" >预算价格</th><th data-options="field:'MaterialPriceClassesName',width:80,align:'center'" >材料单价分类</th><th data-options="field:'IfMainMaterial',width:80,align:'center',formatter:onCheck">是否主材</th><th data-options="field:'OwnerSupplyMaterial',width:80,align:'center',formatter:onCheck" >业主供材</th></tr></thead></table>
(3)赋值给界面控件的代码:
function BangDingSuoYouCaiLiao() {$.getJSON("/CaiLiaoDanJia/SelectAllCaiLiao?BuildProjectID="+ @Session["项目ID"],
//项目ID是之前定义好的全局变量
///CaiLiaoDanJia/SelectAllCaiLiao? 某个控制器下的一个方法名function(data){//data 就是从控制器传来的数据 $('#w材料单价').datagrid('loadData',data);//把数据加载到id为w材料单价的datag中$('#w材料单价').datagrid('endEdit', Ibd);//结束编辑$('#w材料单价').datagrid('beginEdit', Ibd);//开始编辑} );}
(4)控制器的数据传入到界面的代码:
<pre name="code" class="csharp"> public ActionResult SelectAllCaiLiao(string BuildProjectID){DataTable dt = myCaiLiaoDanJia.SelectAllCaiLiao(Convert.ToInt32(BuildProjectID));// Convert.ToInt32是把一个字符串型强制转换成intList<Dictionary<string, object>> ListResult = ConvertHelper.DtToList(dt);return Json(ListResult, JsonRequestBehavior.AllowGet);//把从逻辑层获取的数据转换成Json格式,返回给界面层}
(5)逻辑层的数据传到控制器:
#region 查询全部材料组成public DataTable SelectAllCaiLiao(int BuildProjectID)//根据BuildProjectID这个参数来进行查询数据{SqlParameter[] mySqlParameter ={new SqlParameter("@Type",SqlDbType.Char),new SqlParameter("@BuildProjectID",SqlDbType.Int),};mySqlParameter[0].Value = "SelectAllCaiLiao";mySqlParameter[1].Value = BuildProjectID;DataTable dt = myDALMethod.DAL_SelectDB_Par("CaiLiaoDanJia", mySqlParameter);return dt;}
(6)数据层的数据传到逻辑层:
--查询所有的材料if @Type='SelectAllCaiLiao'beginSELECT SYS_MaterialPriceList.MaterialPriceID, SYS_MaterialPriceList.BuildProjectID, SYS_MaterialPriceList.MaterialPriceClassesID, ltrim(rtrim(SYS_MaterialPriceList.))as Code, -- ltrim(rtrim(就是对Code去空格ltrim(rtrim(SYS_MaterialPriceList.Name))as Name, Unitltrim(rtrim(SYS_MaterialPriceList.Unit))as Unit,ltrim(rtrim( SYS_MaterialPriceList.MaterialCostPrice)) as MaterialCostPrice, ltrim(rtrim(SYS_MaterialPriceList.PackagingPrice)) as PackagingPrice, ltrim(rtrim(SYS_MaterialPriceList.Fare)) as Fare, ltrim(rtrim( SYS_MaterialPriceList.BuyingAndHoldPrice))as BuyingAndHoldPrice, ltrim(rtrim(SYS_MaterialPriceList.TransferSafeCost))as TransferSafeCost, ltrim(rtrim(SYS_MaterialPriceList.BudgetPrice))as BudgetPrice, SYS_MaterialPriceList.IfMainMaterial, SYS_MaterialPriceList.OwnerSupplyMaterial, ltrim(rtrim(SYS_MaterialPriceClassesList.MaterialPriceClassesName))as MaterialPriceClassesName,ltrim(rtrim(SYS_BuildProjectList.BuildProjectName))as BuildProjectName, ltrim(rtrim(SYS_BuildProjectList.BuildProjectName))as BuildProjectName,ltrim(rtrim( SYS_MaterialPriceList.Pinyincode))as Pinyincode, SYS_MaterialPriceList.effectivityno
FROM SYS_MaterialPriceList INNER JOINSYS_MaterialPriceClassesList ON SYS_MaterialPriceList.MaterialPriceClassesID = SYS_MaterialPriceClassesList.MaterialPriceClassesID INNER JOINSYS_BuildProjectList ON SYS_MaterialPriceList.BuildProjectID = SYS_BuildProjectList.BuildProjectID
where SYS_BuildProjectList.BuildProjectID=@BuildProjectID end
3.4-3.1.3 panel窗体
(1)panel窗体截图:
(图 5)
(2)panel窗体界面代码:
<div id="p" class="easyui-panel" title="材料分style="width:220px;height:470px;padding:1px;"data-options="iconCls:'icon-save',closable:true,tools:'#tt'"> // iconCls:'icon-save'就是窗体里材料分类前的图标// tools:'#tt' 就是那些按钮 </div><div id="tt"><a class="icon-add" οnclick="$('#wInsertMaterialClasses').window('open')" ></a>//就是那个加号按钮<a class="icon-edit" οnclick="UpdataMaterialPriceClasses()"></a><a class="icon-cut" οnclick="MaterialPriceClasses_Delete()"></a><a class="icon-help"></a></div>
3.4-3.1.4 checkbox
(1) checkbox截图:
(图 6)
(2) checkbox:界面代码
<input type="checkbox" id="shiyong" />仅显示已使用<input type="checkbox" id="chaxun" />模糊查询 <a >
(3)在datagrid中的check的界面代码:
<th data-options="field:'IfMainMaterial',width:80,align:'center',formatter:onCheck">是否主材</th> //首先要在是否主材这一列调用一个 formatter事件,onCheck方法写在<script/>里<th data-options="field:'OwnerSupplyMaterial',width:80,align:'center',formatter:onCheck" >业主供材</th>
(4)在datagrid中的onCheck方法代码:
function onCheck(BuZhi, Row, Indet) {if(BuZhi == true){//进行判断,如果控制器传来的是有数据的,那就是true,那相应的复选框就会被选中 return '<input style="width:20px;height:20px" id="' + Indet + '" type="checkbox" checked="checked”/>';} else{//否则复选框就不会选中return '<input style="width:20px;height:20px" id="' + Indet + '" type="checkbox"/>';}}
3.4-3.1.5 Combotree
(`1) Combotree的截图:
(图 7)
(2)Combotree的界面代码:
<tr><td>材料分类上级:</td><td><input id="txtTree" class="easyui-combotree" style="width:130px"/></td></tr>
(3)界面层实现的代码:
function BangDingTree() {$.getJSON("/CaiLiaoDanJia/TreeBangDing",function (data) {$('#txtTree').combotree('loadData',data);//把控制器传来的数据加载到下拉树});}
(4)逻辑层和控制器就和绑定下拉树的方法一样。
3.4-3.2 材料单价模块功能分解
3.4-3.2.1 材料单价分类
3.4-3.2.1.1 新增
(1)当你点击 新增 按钮,就会弹出一个新增材料单价分类的窗体
(图 8)
(2)新增窗体的界面代码:
<div id="wInsertMaterialClasses" title="新增材料分类" class="easyui-dialog" style="width:400px;height:300px;left:230px;top:120px"><center> //这是一个居中标签<table style="padding-top:40px"><tr ></tr><tr ><td>材料分类名称:</td><td ><input id="txtMaterialClasses" style="width:140"/></td></tr><tr><td><br /></td></tr><tr><td>材料分类上级:</td><td><input id="txtTree" class="easyui-combotree" style="width:130px"/></td></tr><tr><td><br /></td></tr><tr><td>备 注:</td><td><input id="txtRemark" style="width:140;height:30px"/></td></tr><tr><td> <a οnclick="InsertMaterialPriceClasses()"><input id="txtDefine" type="submit" value="确认"/></a></td><td><a><input id="txtQuit" type="submit" value="退出"/></a></td></tr></table></center></div>
(3)当你输入完数据之后,点击确定按钮,把值传给界面层:
(图 9)
代码如下:
function InsertMaterialPriceClasses(){function XuanZheKuan(BuZhi,Row, Indet) {return'<input style="width:20px;height:20px" id="'+Indet+'" type="checkbox" />';}if(confirm ('是否新增材料分类?')){//新增之前,先确认是否需要新增材料分类$.getJSON("/CaiLiaoDanJia/InsertMaterialPriceClasses?MaterialPriceClassesName="+$('#txtMaterialClasses').val()+"&"+"MaterialPriceClassesFur_ID="+$('#txtTree').combotree('getValue')+"&"+"Remark="+$('#txtRemark').val(),//把获取界面的值传给控制器function (data){if(data>0){//如果控制器传来的data是有数据的,那就进行刷新下拉树$.getJSON("/CaiLiaoDanJia/TreeBangDing",function(data){$('#treMaterial').tree('loadData', data);//把新增的数据绑定给下拉树alert("新增成功!");//提醒你新增成功!$('#wInsertMaterialClasses').window('close');//新增成功后,新增窗体就会关闭 });}else{//如果控制那边没有数据传来,那就新增失败了alert("对不起,新增失败!")}} );}}
(4)界面层的数据通过参数传到控制器的代码:
#region 新增材料分类public ContentResult InsertMaterialPriceClasses(string MaterialPriceClassesName, int MaterialPriceClassesFur_ID, string Remark){int dt = myCaiLiaoDanJia.MaterialPriceClasses_Insert(MaterialPriceClassesName, MaterialPriceClassesFur_ID, Remark);return Content(dt.ToString());}#endregion
(5)控制器的数据通过参数传到逻辑层的代码:
#region 新增材料分类public int MaterialPriceClasses_Insert(string MaterialPriceClassesName, int MaterialPriceClassesFur_ID, string Remark)//参数要和数据层的个数对应{SqlParameter[] mySqlParameter = { new SqlParameter("@Type",SqlDbType.Char),new SqlParameter("@MaterialPriceClassesName",SqlDbType.Char),new SqlParameter("@MaterialPriceClassesFur_ID",SqlDbType .Int),new SqlParameter("@Remark",SqlDbType .Char),};//生成数组mySqlParameter[0].Value = "MaterialPriceClasses_Insert";//对应存储过程名mySqlParameter[1].Value = MaterialPriceClassesName;mySqlParameter[2].Value = MaterialPriceClassesFur_ID;mySqlParameter[3].Value = Remark;int i = myDALMethod.DAL_OPTableDB_Par("CaiLiaoDanJia", mySqlParameter);return i;//然后再返回给控制器}#endregion
(6)逻辑层的数据通过参数传到数据层的代码:
if @Type='MaterialPriceClasses_Insert'begininsert SYS_MaterialPriceClassesList(MaterialPriceClassesName,MaterialPriceClassesFur_ID,Remark)values (@MaterialPriceClassesName,@MaterialPriceClassesFur_ID,@Remark)end
(6)新增成功后的下拉树截图:
(图 10)
3.4-3.2.1.2 修改
(1)对已经存在的下拉树的节点进行修改,首先先选中你要修改的节点,再点击修改按钮,会弹出修改材料单价分类的窗体:
(图 11)
(2)当你选中你要修改的节点,再点击修改按钮时,其实在打开修改窗体的同时,就在进行一个绑定数据的操作,代码如下:
//打开修改窗口function UpdataMaterialPriceClasses() {var Tree1 = $('#treMaterial').tree('getSelected');//选中你要修改的节点if (Tree1) {//如果这个节点存在//那修改窗体就会打开$('#wUpdatetMaterialClasses').window('open');BindingMaterialPriceClasses();//调用帮的节点的方法}else { //如果没有选中节点,就会提醒你选中alert("请选择要修改的部门!")}}//修改下拉树_ 绑定数据function BindingMaterialPriceClasses(){var TreeID=$('#treMaterial').tree('getSelected');if(TreeID){$('#txtTreeClasses').val(TreeID.text);//把获取下拉树节点的值赋值给相应的文本框var TreeTwo=TreeID.id;}}
(3)当你修改完节点之后,就点击确认按钮,就会把你修改的值传给界面层,代码如下:
(图 12)
//修改下拉树function MaterialPriceClasses_Updata(){var TreeID2=$('#treMaterial').tree('getSelected');//获取要修改的节点赋值给TreeID2MaterialPriceClassesID=TreeID2.id;//获取节点id赋值给MaterialPriceClassesIDif(TreeID2){//判断节点是否存在if (confirm('是否需要修改?')){//修改之前再确认一下 $.getJSON("MaterialPriceClasses_Updata?MaterialPriceClassesName="+$('#txtTreeClasses').val()+"&"+"MaterialPriceClassesFur_ID="+$('#txtTreeHall').combotree('getValue')+"&"+"Remarkint="+$('#txtTreeRemark').val()+"&"+"MaterialPriceClassesID="+MaterialPriceClassesID,//把从界面获取出的值传给参数,传给控制器function (data){if (data>0){//如果控制器那边有数据传来,就把修改后的下拉树刷新一次$.getJSON("/CaiLiaoDanJia/TreeBangDing",function (data) {$('#treMaterial').tree('loadData', data);//修改后的下拉树的数据再重新绑定alert("修改成功!");$('#wUpdatetMaterialClasses').window('close');//修改成功之后,窗体自动关闭});}else{alert("修改失败!");}});}}else{alert("请选中需要修改的节点!");}}
(4)控制器的数据返回给界面层的代码:
#region 修改材料分类public ContentResult MaterialPriceClasses_Updata(string MaterialPriceClassesName, int MaterialPriceClassesFur_ID, string Remarkint, int MaterialPriceClassesID){int dt = myCaiLiaoDanJia.MaterialPriceClasses_Updata(MaterialPriceClassesName, MaterialPriceClassesFur_ID, Remarkint, MaterialPriceClassesID);return Content(dt.ToString());}#endregion
(5)逻辑层的数据返回给控制器的代码:
#region 修改下拉树public int MaterialPriceClasses_Updata(string MaterialPriceClassesName, int MaterialPriceClassesFur_ID, string Remarkint, int MaterialPriceClassesID){SqlParameter[] mySqlParameter = { new SqlParameter("@Type",SqlDbType.Char),new SqlParameter ("@MaterialPriceClassesName",SqlDbType .Char),new SqlParameter ("@MaterialPriceClassesFur_ID",SqlDbType .Int ),new SqlParameter ("@Remark",SqlDbType .Char),new SqlParameter ("@MaterialPriceClassesID",SqlDbType .Int),};mySqlParameter[0].Value = "MaterialPriceClasses_Updata";mySqlParameter[1].Value = MaterialPriceClassesName;mySqlParameter[2].Value = MaterialPriceClassesFur_ID;mySqlParameter[3].Value = Remarkint;mySqlParameter[4].Value = MaterialPriceClassesID;int i = myDALMethod.DAL_OPTableDB_Par("CaiLiaoDanJia", mySqlParameter);return i;}#endregion
(6)数据层的数据传给逻辑层控制器的代码:
--树形的修改if @Type='MaterialPriceClasses_Updata'beginupdate SYS_MaterialPriceClassesListset MaterialPriceClassesName=@MaterialPriceClassesName,MaterialPriceClassesFur_ID=@MaterialPriceClassesFur_ID,Remark=@Remark //要声明变量where MaterialPriceClassesID=@MaterialPriceClassesIDend
(7) 对下拉树节点修改成功后的截图:
(图 13)
3.4-3.2.1.3 删除
(1)对于多余的下拉树节点,可以对其进行删除(其实就是删除某个节点的id),首先要先选中你要删除的节点,再点击删除按钮:
(图 14)
(2)点击确定按钮之后,会把获取的节点ID返回给界面层,代码如下:
//删除节点—材料分类function MaterialPriceClasses_Delete(){var TreeID2=$('#treMaterial').tree('getSelected');
//先选中要删除的节点MaterialPriceClassesID=TreeID2.id;//获取选中节点的idif(TreeID2){//判断是否选中节点if(confirm('是否删除该节点及以下材料分类')){//删除之前先进行确认
$.getJSON("MaterialPriceClasses_Delete?MaterialPriceClassesID="+MaterialPriceClassesID,function (data){if (data>0){$.getJSON("/CaiLiaoDanJia/TreeBangDing",function (data){$('#treMaterial').tree('loadData', data);alert("删除成功!");});}else{alert("删除失败!");}});}}else{alert("请选中需要删除的节点!");}}
(3)界面层获取的值传给控制器:
#region 删除材料分类-下拉树public ContentResult MaterialPriceClasses_Delete(int MaterialPriceClassesID){int i = myCaiLiaoDanJia.MaterialPriceClasses_Delete(MaterialPriceClassesID);return Content(i.ToString());}#endregion
(4)逻辑层的数据返回给控制器,代码如下:
#region 删除下拉树-材料分类public int MaterialPriceClasses_Delete(int MaterialPriceClassesID){SqlParameter[] mySqlParameter = { new SqlParameter ("@Type",SqlDbType .Char),new SqlParameter ("@MaterialPriceClassesID",SqlDbType.Int),};mySqlParameter[0].Value = "MaterialPriceClasses_Delete";mySqlParameter[1].Value = MaterialPriceClassesID;int i = myDALMethod.DAL_OPTableDB_Par("CaiLiaoDanJia", mySqlParameter);return i;
//把数据返回给控制器}#endregion
(5)逻辑层的数据传给数据层:
--材料分类的删除if @Type='MaterialPriceClasses_Delete'begindelete SYS_MaterialPriceClassesListwhere MaterialPriceClassesID=@MaterialPriceClassesID--根据材料单价的ID进行删除end
(6)删除成功后的截图:
(图 15)
3.4-3.2.2 材料单价
3.4-3.2.2.1 添加
(1)当点击添加按钮时,就会弹出添加材料单价的窗体:
添加材料单价的窗体如下图:
(图 16)
添加材料单价窗体的界面代码:
<div id="wInsertMaterialPrice" title="添加材料单价" class="easyui-dialog" style="width:550px;height:370px;left:400px;top:10px "><fieldset style="border:1px solid #C0C0C0"><legend >添加材料单价</legend><table><tr><td align="right">代号:</td><td><input id="txtCode" readonly style="width:160px;height:20px;color: #FF0000"/></td><td align="right">名称:</td><td><input id="txtName" style="width:160px;height:20px;color: #598DDB"/></td></tr><tr><td align="right">单位:</td><td><input id="txtUnit" style="width:100px;height:20px;color: #598DDB"/><a οnclick="SelectUnit()"><input type="submit"value="添加>>" /><//td><td align="right">材料原价:</td><td><input id="txtMaterialCostPrice" style="width:160px;height:20px; color: #598DDB;" value="00.00" /></td></tr><tr><td align="right">包装费:</td><td><input id="txtPackagingPrice" style="width:160px;height:20px;color: #598DDB;" value="00.00"/></td><td align="right">运杂费:</td><td><input id="txtFare" readonly="readonly" style="width:160px;height:20px;color: #598DDB; background-color: #FFFF00;" value="00.00"/></td></tr><tr><td align="right">采购保管费:</td><td><input id="txtBuyingAndHoldPrice" style="width:160px;height:20px;color: #598DDB;" value="00.00"/></td><td align="right">运输费:</td><td><input id="txtTransferSafeCost" style="width:160px;height:20px;color: #598DDB;" value="00.00"/></td></tr><tr><td align="right">是否主材:</td><td><input type="checkbox" id="txtIfMainMaterial" style="width:160px;height:20px;color: #598DDB;" /></td><td align="right">业主供材:</td><td><input type="checkbox" id="txtOwnerSupplyMaterial" style="width:160px;height:20px"/></td></tr><tr><td align="right">预算单价:</td><td><input id="txtBudgetPrice" readonly="readonly"style="width:160px;height:20px;color: #598DDB;" value="00.00"/></td></tr></table></fieldset><table><tr><td ><input id="repeat" type="checkbox" />多次重复添加<a ><input οnclick="Count()"type="submit" value="计算/></a><a ><input οnclick="MaterialPrice_Insert()" type="submit" data-options="iconCls:'icon-save'" value="保存" /></a><a ><input type="submit" value="退出" /></a></td></tr></table></div>
(2)当你输完数据之后,要先计算预算单价,预算单价已经设置了只读属性,只能计算得出,不能手写,运杂费也不能输入,只能在datagrid中双击运杂费那一列,弹出专门计算运杂费的窗体进行计算。
(图 17)
点击计算的界面方法:,代码如下:
/计算1function Count(){var MaterialCostPrice=$('#txtMaterialCostPrice').val();//单个获取界面输入的各种价格var PackagingPrice=$('#txtPackagingPrice').val();var Fare=$('#txtFare').val();var BuyingAndHoldPrice=$('#txtBuyingAndHoldPrice').val();var TransferSafeCost=$('#txtTransferSafeCost').val();var u=$('#txtBudgetPrice').val();u=MaterialCostPrice*1+PackagingPrice*1+Fare*1+BuyingAndHoldPrice*1+TransferSafeCost*1//获取值后再进行组合,赋值给u$('#txtBudgetPrice').val(u);//把u赋值给 预算单价的文本框}
(3)计算出预算价格后,点击保存,就会把 值传给界面层:
(图 18)
(4) 当打开添加材料单价的窗体时,代码就会自动生成:
界面层的代码:
//自动增加单号var Code=0;//声明变量Code;function oddnumbers(){if(confirm('您是否需要进行新增材料单价这一操作?')){$('#wInsertMaterialPrice').window('open');//添加材料窗体打开$.getJSON("/CaiLiaoDanJia/Insert_Code/",function (data) {//从控制器传来的数据dataCode= data[0].InsertCode;//获取data数据索引为0的数据,赋值给Codevar t="C0"+ Code; $('#txtCode').val(t);//把 t 的值赋值给代号的文本框});}else{alert("您已经取消新增材料单价这一操作!");}}
控制器的代码:
#region 自动增加单号public ActionResult Insert_Code(){DataTable dt = myCaiLiaoDanJia.Insert_Code();List<Dictionary<string, object>> listReturn = ConvertHelper.DtToList(dt);return Json(listReturn, JsonRequestBehavior.AllowGet);}#endregion
逻辑层的代码:
#region 自动增加单号public DataTable Insert_Code(){SqlParameter[] mySQL = {new SqlParameter("@type",SqlDbType.Char), };mySQL[0].Value = "Insert_Code";DataTable dt = myDALMethod.DAL_SelectDB_Par("CaiLiaoDanJia", mySQL);return dt;}#endregion
数据库的代码:
if @type='Insert_Code'BEGINbegin tranupdate InsertCode set InsertCode=InsertCode+1SELECT InsertCodeFROM InsertCode commit tranend
(5)点击保存,把值传给界面层:
/新增材料单价var sd=0;//声明变量sd=0;function MaterialPrice_Insert (){var r=document.getElementById("repeat").checked; //把id为repeat的复选框被选中时的状态赋值给 r (看是否选中多次重复添加)var txtIfMainMaterial=false;if( document.getElementById('txtIfMainMaterial').checked==true){//判断checkBox是否被选中txtIfMainMaterial=true;}var txtOwnerSupplyMaterial=false;if(document.getElementById('txtOwnerSupplyMaterial').checked==true){txtOwnerSupplyMaterial=true;}var MaterialPriceClassesID=$('#treMaterial').tree('getSelected');// 先选中下拉树的节点if(MaterialPriceClassesID){ //如果某个节点被选中//就把被选中节点的id赋值给 sd sd =MaterialPriceClassesID.id;}if(confirm('是否需要新增?')){//先确定是否需要新增?if(sd !=0){//如果 sd 不等于0(也就是节点被选中),就执行下面的代码$.getJSON("/CaiLiaoDanJia/MaterialPrice_Insert?Code="+$('#txtCode').val()+"&"+"Name="+$('#txtName').val()+"&"+"Unit="+$('#txtUnit').val()+"&"+"MaterialCostPrice="+$('#txtMaterialCostPrice').val()+"&"+"PackagingPrice="+$('#txtPackagingPrice').val()+"&"+"Fare="+$('#txtFare').val()+"&"+"BuyingAndHoldPrice="+$('#txtBuyingAndHoldPrice').val()+"&"+"TransferSafeCost="+$('#txtTransferSafeCost').val()+"&"+"BudgetPrice="+$('#txtBudgetPrice').val()+"&"+"IfMainMaterial="+txtIfMainMaterial+"&"+"OwnerSupplyMaterial="+txtOwnerSupplyMaterial+"&"+"MaterialPriceClassesID="+sd+"&"+"BuildProjectID="+@Session["项目ID"]//把界面获取的值传给控制器的参数,function (data){if (data>0){//看是否控制器有数据传来$.getJSON("/CaiLiaoDanJia/SelectAllCaiLiao?BuildProjectID="+ @Session["项目ID"],function(data){$('#w材料单价').datagrid('loadData',data);alert("新增成功!");if (r){//如果选中了多次重复添加的复选框$('#wInsertMaterialPrice').window('open');//那么添加材料单价的窗体就会打开//并且会清空文本框的值$('#txtCode').val("");$('#txtName').val("");$('#txtUnit').val("");$('#txtMaterialCostPrice').val("");$('#txtPackagingPrice').val("");$('#txtFare').val("0.00");$('#txtBuyingAndHoldPrice').val("");$('#txtTransferSafeCost').val("");$('#txtBudgetPrice').val("");oddnumbers();//自动生成代号的方法}else{//如果没有选中多次重复添加,则会关闭其窗体$('#wInsertMaterialPrice').window('close');alert("新增成功后,请双击列名为“运杂费”,进行运杂费的计算!");}} );}else{alert("新增失败");}});}else{//如果没选中下拉树,就不能进行保存操作,系统会自动提醒alert("请选中下拉树!");}}}
(6)把界面保存的值传给控制器,代码如下:
#region 新增材料单价public ContentResult MaterialPrice_Insert(string Code, string Name, string Unit, decimal MaterialCostPrice, decimal PackagingPrice, decimal Fare, decimal BuyingAndHoldPrice, decimal TransferSafeCost, decimal BudgetPrice, bool IfMainMaterial, bool OwnerSupplyMaterial, int MaterialPriceClassesID, int BuildProjectID){int dt = myCaiLiaoDanJia.MaterialPrice_Insert(Code, Name, Unit, MaterialCostPrice, PackagingPrice, Fare, BuyingAndHoldPrice, TransferSafeCost, BudgetPrice, IfMainMaterial, OwnerSupplyMaterial, MaterialPriceClassesID, Bu ildProjectID);return Content(dt.ToString());}#endregion
(7) 把控制器的值通过参数传给逻辑层,代码如下:
#region 新增材料单价
public int MaterialPrice_Insert(string Code, string Name, string Unit, decimal MaterialCostPrice, decimal PackagingPrice, decimal Fare, decimal BuyingAndHoldPrice, decimal TransferSafeCost, decimal BudgetPrice, bool IfMainMaterial, bool OwnerSupplyMaterial, int MaterialPriceClassesID, int BuildProjectID){SqlParameter[] mySqlParameter = { new SqlParameter("@Type",SqlDbType.Char),new SqlParameter ("@Code",SqlDbType.Char),new SqlParameter ("@Name",SqlDbType.Char),new SqlParameter ("@Unit",SqlDbType.Char),new SqlParameter ("@MaterialCostPrice",SqlDbType.Decimal),new SqlParameter ("@PackagingPrice",SqlDbType.Decimal),new SqlParameter ("@Fare",SqlDbType .Decimal),new SqlParameter ("@BuyingAndHoldPrice",SqlDbType .Decimal),new SqlParameter ("@TransferSafeCost",SqlDbType .Decimal ),new SqlParameter ("@BudgetPrice",SqlDbType.Decimal ),new SqlParameter ("@IfMainMaterial",SqlDbType.Bit),new SqlParameter ("@OwnerSupplyMaterial",SqlDbType.Bit),new SqlParameter ("@MaterialPriceClassesID",SqlDbType.Int),new SqlParameter ("@BuildProjectID",SqlDbType.Int),};mySqlParameter[0].Value = "MaterialPrice_Insert";mySqlParameter[1].Value = Code;mySqlParameter[2].Value = Name;mySqlParameter[3].Value = Unit;mySqlParameter[4].Value = MaterialCostPrice;mySqlParameter[5].Value = PackagingPrice;mySqlParameter[6].Value = Fare;mySqlParameter[7].Value = BuyingAndHoldPrice;mySqlParameter[8].Value = TransferSafeCost;mySqlParameter[9].Value = BudgetPrice;mySqlParameter[10].Value = IfMainMaterial;mySqlParameter[11].Value = OwnerSupplyMaterial;mySqlParameter[12].Value = MaterialPriceClassesID;mySqlParameter[13].Value = BuildProjectID;int i = myDALMethod.DAL_OPTableDB_Par("CaiLiaoDanJia", mySqlParameter);return i;//返回数据给控制器}#endregion
(8)把逻辑层的值通过参数传给数据层,代码如下:
--材料单价的新增if @Type='MaterialPrice_Insert'begininsert SYS_MaterialPriceList(Code, Name, Unit, MaterialCostPrice, PackagingPrice, Fare, BuyingAndHoldPrice, TransferSafeCost, BudgetPrice, IfMainMaterial, OwnerSupplyMaterial,MaterialPriceClassesID,BuildProjectID)values (@Code,@Name, @Unit, @MaterialCostPrice, @PackagingPrice, @Fare, @BuyingAndHoldPrice, @TransferSafeCost, @BudgetPrice, @IfMainMaterial, @OwnerSupplyMaterial,@MaterialPriceClassesID,@BuildProjectID) end
(9)新增完之后的截图,还需要新增运杂费:
(图 19)
双击运杂费,出现计算运杂费的窗体:
(图 20)
计算运杂费的界面代码:
<div id="yunZaFei" class="easyui-dialog" style="width:720px;height:450px;left:100px;top:40px" data-options="closed:true,tools:'#tds'"><table><tr><td ><table id="YunShuXiangMu" class="easyui-datagrid" title="运输项目"style="width:200px;height:390px" data-options="singleSelect:true,rownumbers:true,onClickRow:YunZaFeiYong,toolbar:'#tb'"><thead><tr><th data-options="field:'YunShuXiangMuID',width:80,hidden:true,align:'center'">运输项目</th><th data-options="field:'YunShuXiangMu',width:100,align:'center'">运输项目</th><th data-options="field:'FeiYong',width:100,align:'center'">费用</th></tr></thead></table></td><td style="top:30px"><from id="fromYunShuXiangMu"><div style="width:460px;height:350px"><fieldset style="border:1px solid #C0C0C0"><legend ></legend><table><tr style="height:24px"><td style="padding:0px;height:24px">运输起点位置</td ><td style="padding:0px;height:24px"><input id="YunShuQiDianWeiZhi" style="width:120px;height:20px;color: #FF0000"/></td></tr> <tr style="height:24px"><td style="padding:0px;height:24px">装车费</td><td style="padding:0px;height:24px"><input id="ZhuangCheFei" onkeyup ="ZhuangCheFei()" style="width:60px;height:20px;color: #FF0 000"" value="0"/></td></tr> <tr style="height:24px"> <td style="padding:0px;height:24px">每公里运费</td><td style="padding:0px;height:24px"><input id="YunFei" onkeyup ="ZhuangCheFei()" style="width:60px;height:20px;color: #FF0000" value="0" /></td><td style="padding:0px;width:30px;height:30px">运距</td><td style="padding:0px;height:24px"><input id="YunJu" onkeyup ="ZhuangCheFei()" style="width:60px;height:20px;color: #FF0000"value="0"/></td><td style="padding:0px;height:24px;;width:33px;">系数</td><td style="padding:0px;height:24px"><input id="XiShu"onkeyup ="ZhuangCheFei()" style="width:60px;height:20px;color: #FF0000"value="1"/></td></tr><tr style="height:24px"><td style="padding:0px;height:24px">装载系数</td><td style="padding:0px;height:24px"><input id="ZhuangXishu" onkeyup ="ZhuangCheFei()"style="width:60px;height:20px;color: #FF0000"value="0"/></td></tr> <tr style="height:24px"><td style="padding:0px;height:24px">卸车费</td><td style="padding:0px;height:24px"><input id="XieCheFei" onkeyup ="ZhuangCheFei()" style="width:60px;height:20px;color: #FF0000"value="0"/></td></tr> <tr style="height:24px"><td style="padding:0px;height:24px" >其它</td><td style="padding:0px;height:24px"><input id="QiTa" onkeyup ="ZhuangCheFei()"style="width:60px;height:20px;color: #FF0000"value="0"/></td></tr> <tr style="height:24px"><td style="padding:0px;height:24px">运输公式</td><td style="padding:0px;height:24px"><input id="YunShuGongShi" onkeyup ="ZhuangCheFei()"style="width:120px;height:20px;color: #FF0000""/></td></tr> <tr style="height:24px"><td style="padding:0px;height:24px">运杂费</td><td style="padding:0px;height:24px"><input id="yunzafei" onkeyup ="ZhuangCheFei()" style="width:60px;height:20px;color: #FF0000""/></td></tr> </table></fieldset><fieldset style="border:1px solid #C0C0C0"><legend ></legend><table><tr><td align="right">交货地点:</td><td><input id="JiaoHuoDiDiao" style="width:100px;height:20px;color: #FF0000""/></td></tr> <tr><td align="right">交货条件:</td><td><input id="JiaoHuoTiaoJian" style="width:100px;height:20px;color: #FF0000""/></td></tr> <tr><td align="right">货物等级:</td><td><input id="HuoWuDengJi" style="width:100px;height:20px;color: #FF0000""/></td></tr> </table></fieldset></div> </from></td></tr> </table></div><div id="tds"><a class="icon-add" οnclick="InsertYunZaFei()" ></a><a class="icon-edit" οnclick="Update22()"></a><a class="icon-cut" οnclick=""></a><a class="icon-help"></a></div><div id="tb" style="padding:0px;"><div style="margin-bottom:5px"><a οnclick="Count11()" ><input type="submit"value="计算" /></a><a><td align="right">合计:</td><td> <a><input id="YingFuJingE"style="width:120px"/></a> </td></a><a οnclick="OK()" ><input type="submit"value="确认" /></a></div></div>
(9.1)双击运杂费界面实现的方法:
//双击运杂费function ShuangJiYunZaFei(rowIndex, field, value){if(field=="Fare"){//如果双击列名为Fare时,就会打开计算运输项目的窗体$('#InsertyunZaFei').window('open');Insertyunshu();//加载左边运输项目的方法}}function Insertyunshu(){var CaiLiaoID=$('#w材料单价').datagrid('getSelected');$.getJSON("/CaiLiaoDanJia/BangDingXiangMu?MaterialPriceID="+CaiLiaoID.MaterialPriceID,function(data){$('#InsertYunShuXiangMu').datagrid('loadData',data);});}
(图 21)
(9.2)(图 21)中添加的方法在界面层中的代码:
//左移var trues=0;function ZuoYi(){var YunShuXiangMu=$('#TianJiaYunShuXiangMu').datagrid('getSelected');//先选中右边运输项目的一行,赋值给YunShuXiangMu var CaiLiaoID=$('#w材料单价').datagrid('getSelected');var e=$('#InsertYunShuXiangMu').datagrid('getData');//获取整个右边项目的数据for(var j=0;j<e.rows.length;j++){//循环遍历数据if(e.rows[j].YunShuXiangMu.trim()==YunShuXiangMu.NatureGatherDetailName.trim()){//进行判断,就是不能添加相同的数据到左边的datagrid中,如果相同//就把1赋值给truestrues=1;}else{}}if(trues!==1){//只有在trues不等于1的情况下,才能执行下面的代码trues=0;var a=YunShuXiangMu.NatureGatherDetailName.trim();$.getJSON("/CaiLiaoDanJia/TianJiaYunFeiXiangMu?MaterialPriceID="+CaiLiaoID.MaterialPriceID+"&"+"YunShuXiangMu="+YunShuXiangMu.NatureGatherDetailName.trim()+"&"+"FeiYong="+"0",//把从界面获取的值传给控制器function(data){$.getJSON("/CaiLiaoDanJia/BangDingXiangMu?MaterialPriceID="+CaiLiaoID.MaterialPriceID,function(data){$('#InsertYunShuXiangMu').datagrid('loadData',data);//把从右边datagrid中获取出的数据加载到左边的datagrid中});});}else{trues=0;alert("已添加此数据,请点击下一条");}}
(9.2.1)点击添加后,就会把界面层的数据通过参数传给控制器,代码如下:
#region 添加运输项目public ContentResult TianJiaYunFeiXiangMu(int MaterialPriceID, string YunShuXiangMu, string FeiYong){int dt = myCaiLiaoDanJia.TianJiaYunFeiXiangMu(MaterialPriceID, YunShuXiangMu, FeiYong);return Content(dt.ToString());}#endregion
(9.2.2)控制器的数据传给逻辑层的代码:
#region 新增运输项目public int TianJiaYunFeiXiangMu(int MaterialPriceID, string YunShuXiangMu, string FeiYong){SqlParameter[] mySqlParameter = { new SqlParameter("@Type",SqlDbType.Char),new SqlParameter ("@MaterialPriceID",SqlDbType.Int),new SqlParameter ("@YunShuXiangMu",SqlDbType.Char),new SqlParameter ("@FeiYong",SqlDbType.Char),};mySqlParameter[0].Value = "InsertYunFeiXiangMu";mySqlParameter[1].Value = MaterialPriceID;mySqlParameter[2].Value = YunShuXiangMu;mySqlParameter[3].Value = FeiYong;int i = myDALMethod.DAL_OPTableDB_Par("CaiLiaoDanJia", mySqlParameter);return i;}#endregion
(9.2.3)逻辑层的数据传给数剧层的代码:
--新增运费项目if @Type='InsertYunFeiXiangMu'begininsert Sys_YunShuXiangMuBiao( MaterialPriceID, YunShuXiangMu, FeiYong)values ( @MaterialPriceID, @YunShuXiangMu, @FeiYong)end
(图 22)
(9.3)当你对里面涉及到费用的文本框时,运输公式中相应的数字会发生改变,运杂费也会自动计算出来,所用到的界面的代码如下:
(图 23)
代码:
//在相应的文本框设置了onkeyup事件var a="";var b="";var c="";var d="";var e="";var f="";var g="";function ZhuangCheFei(){a= ($('#ZhuangCheFei').val()).trim();b= $('#YunFei').val().trim();c=$('#YunJu').val().trim(); d=$('#ZhuangXishu').val().trim();e=$('#XiShu').val().trim();f= $('#XieCheFei').val().trim();g= $('#QiTa').val().trim();//获取文本框里的值$('#YunShuGongShi').val(a+"+"+b+"*"+c+"*"+d+"/"+e+"+"+f+"+"+g);var Count=a*1+b*c*d/e+f*1+g*1;$('#yunzafei').val(Count);//把计算出的结果赋值给运杂费的文本框}
(9.4)当填完相应的文本框的值后,就点击添加按钮,这时执行的方法在界面层的代码:
(图 24)
function InsertYunZaFei(){var CaiLiaoID=$('#w材料单价').datagrid('getSelected');//要选中需要新增运杂费的材料单价的datagridvar XiangMu= $('#YunShuXiangMu').datagrid('getSelected');//先选中左边的id为YunShuXiangMu'的datagrid$.getJSON("/CaiLiaoDanJia/SelectedYunZaFei?YunShuXiangMuID="+XiangMu.YunShuXiangMuID,//先进行查询,如果已经添加了,就不能进行添加function(data){if(data.length<1){//如果从控制器传来的data无数据,就可以进行添加$.getJSON("/CaiLiaoDanJia/InsertYunZaFei?YunShuXiangMuID="+XiangMu.YunShuXiangMuID+"&"+"运输起点="+$('#YunShuQiDianWeiZhi').val().trim()+"&"+"装车费="+a+"&"+"每公里运费="+b+"&"+"运距="+c+"&"+"系数="+e+"&"+"装载系数="+f+"&"+"卸车费="+d+"&"+"其它="+g+"&"+"计算公式="+$('#YunShuGongShi').val().trim()+"&"+"每吨运杂费="+$('#yunzafei').val().trim()+"&"+"交货地点="+$('#JiaoHuoDiDiao').val()+"&"+"交货条件="+$('#JiaoHuoTiaoJian').val()+"&"+"交货等级="+$('#HuoWuDengJi').val()+"&",function(data){});$.getJSON("/CaiLiaoDanJia/UpdateYunFeiXiangMu?MaterialPriceID="+CaiLiaoID.MaterialPriceID+"&"+"FeiYong="+$('#yunzafei').val().trim()+"&"+"YunShuXiangMuID="+XiangMu.YunShuXiangMuID,function(data){$.getJSON("/CaiLiaoDanJia/BangDingXiangMu?MaterialPriceID="+CaiLiaoID.MaterialPriceID,function(data){$('#YunShuXiangMu').datagrid('loadData',data);});});}else{alert("不能进行添加,已添加了一条数据!");}});XiangMu.FeiYong=$('#yunzafei').val().trim();$('#YunShuXiangMu').datagrid('refreshRow',INdex);}
(9.4.1)控制器的代码:
#region 新增运杂费public ContentResult InsertYunZaFei(string YunShuXiangMuID, string 运输起点, string 装车费, string 每公里运费,string 运距, string 系数, string 装载系数, string 卸车费, string 其它, string 计算公式, string 每吨运杂费,string 交货地点, string 交货条件, string 交货等级){int dt = myCaiLiaoDanJia.InsertYunZaFei(Convert.ToInt32(YunShuXiangMuID), 运输起点, 装车费, 每公里运费, 运距, 系数, 装载系数, 卸车费, 其它, 计算公式, 每吨运杂费, 交货地点, 交货条件, 交货等级);return Content(dt.ToString());}#endregion
(9.4.2)逻辑层的代码:
#region 新增运杂费
public int InsertYunZaFei(int YunShuXiangMuID, string 运输起点, string 装车费, string 每公里运费,string 运距, string 系数, string 装载系数, string 卸车费, string 其它, string 计算公式, string 每吨运杂费,string 交货地点, string 交货条件, string 交货等级){SqlParameter[] mySqlParameter = { new SqlParameter("@Type",SqlDbType.Char),new SqlParameter ("@YunShuXiangMuID",SqlDbType.Int),new SqlParameter ("@运输起点",SqlDbType.Char),new SqlParameter ("@装车费",SqlDbType.Char),new SqlParameter ("@每公里运费",SqlDbType.Char),new SqlParameter ("@运距",SqlDbType.Char),new SqlParameter ("@系数",SqlDbType .Char),new SqlParameter ("@装载系数",SqlDbType .Char),new SqlParameter ("@卸车费",SqlDbType .Char ),new SqlParameter ("@其它",SqlDbType.Char ),new SqlParameter ("@计算公式",SqlDbType.Char),new SqlParameter ("@每吨运杂费",SqlDbType.Char),new SqlParameter ("@交货地点",SqlDbType.Char ),new SqlParameter ("@交货条件",SqlDbType.Char),new SqlParameter ("@交货等级",SqlDbType.Char),};mySqlParameter[0].Value = "InsertYunZaFei";mySqlParameter[1].Value = YunShuXiangMuID;mySqlParameter[2].Value = 运输起点;mySqlParameter[3].Value = 装车费;mySqlParameter[4].Value = 每公里运费;mySqlParameter[5].Value = 运距;mySqlParameter[6].Value = 系数;mySqlParameter[7].Value = 装载系数;mySqlParameter[8].Value = 卸车费;mySqlParameter[9].Value = 其它;mySqlParameter[10].Value = 计算公式;mySqlParameter[11].Value = 每吨运杂费;mySqlParameter[12].Value = 交货地点;mySqlParameter[13].Value = 交货条件;mySqlParameter[14].Value = 交货等级;int i = myDALMethod.DAL_OPTableDB_Par("CaiLiaoDanJia", mySqlParameter);return i;}#endregion
(9.4.3)数据层的代码:
--新增运杂费
if @Type='InsertYunZaFei'begin
insert [Sys-YunZaFeiBiao](YunShuXiangMuID, 运输起点,装车费,每公里运费,运距,系数,装载系数,卸车费,其它,计算公式, 每吨运杂费,交货地点,交货条件,交货等级)values (@YunShuXiangMuID, @运输起点, @装车费, @每公里运费, @运距, @系数, @装载系数, @卸车费, @其它, @计算公式, @每吨运杂费, @交货地点, @交货条件, @交货等级)end
(9.4.4)新增运杂费后的截图
(图 25)
(图 26)
仅供学习参考,静止商业用途,否则后果自负!
凯云水利水电造价工程系统 (三) 材料单价模块(1)相关推荐
- 凯云水利水电工程造价系统 (三) 材料单价 (2)
凯云水利水电工程造价系统 (二) 材料单价 (2) 接着上一篇的材料单价 (1) 3.4-3.2.2.2修改 (1)当点击材料单价的修改按钮时,就会弹出修改材料单价的窗体: (图 1) (2)修改之前 ...
- 凯云水利水电工程造价系统 (五) 补充定额
凯云水利水电工程造价系统 (五) 补充定额 3.10 功能9名称:补充定额 3.10-1 功能实现 补充定额数据的处理:添加.删除.复制.粘贴.导入.导出 补充定额的添加,删除:击添加会出现一个窗体, ...
- 凯云水利水电工程造价系统 (四) 配合比单价模块
凯云水利水电工程造价系统 (四) 配合比单价模块 3.6-1功能实现 配合比单价的数据处理有:添加.批量修改.从定额导入.删除.复制.粘贴.导入.导出. 配合比单价的添加.批量修改.删除:点击添加会 ...
- 凯云水利水电工程造价系统 (四)配合比单价(2)
凯云水利水电工程造价系统 (四)配合比单价(2) 3.6-3.1.2 配合比单价明细 3.6-3.1.2.1 添加 (1)添加配合比单价明细,点击添加按钮: (图 23) 当你单击材料单价中材料列表 ...
- 凯云水利水电工程造价管理系统 技术解释(十三) 中间单价(四)
中间单价 功能实现 中间单价包含三个部分:一个是中间单价列表,一个是中间单价定额组成表,一个是中间单价定额人材机组成表,中间单价列表,你可以对其进行新增,删除和修改.当点击时,点击添加会在datagr ...
- 凯云水利水电工程造价管理系统 技术解析(四)取费管理(一)
取费管理 3.7-1 功能实现 取费管理的数据处理主要有:添加.删除.复制.粘贴.导出.导入 取费管理的添加,会弹出一个窗体,里面只有取费分类列表名,而其它的字段可以双击列名为名称和单位那两列时,会弹 ...
- 凯云水利水电工程造价管理系统 技术解析(七) 机械单价(二)
机械单价 功能实现: 机械单价包含三个部分:一个是机械单价分类,一个是机械单价,一个是机械单价明细.机械分类的是一个下拉树,可以对其进行新增,删除和修改它的节点.当点击机械分类时,机械单价会出现相应的 ...
- 水利水电安装工程项目管理信息系统
水利水电安装工程项目管理信息系统 近些年来,伴随着社会的进步和经济的发展,水利水电工程规模和数量同样获得了良好的发展空间,在一定程度上推动了工程各项技术的创新和发展.然而在水利水电工程施工过程中存在诸 ...
- 打造云原生大型分布式监控系统(三): Thanos 部署与实践
视频 附上本系列完整视频 打造云原生大型分布式监控系统(一): 大规模场景下 Prometheus 的优化手段 打造云原生大型分布式监控系统(一): 大规模场景下 Prometheus 的优化手段_哔 ...
最新文章
- Objective-C 什么是类
- 针对安全探索的受限强化学习:原始对偶优化算法
- java.lang.ExceptionInInitializerError的原因
- 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈
- 2010-2011年中国嵌入式开发从业人员调查报告隆重推
- MFC的程序,不想显示窗口,任务栏里也不显示
- C语言数据结构编程实列,数据结构C语言实现----栈的实例
- 数学建模 图论最短路径问题
- 修改 VC 生成的 EXE 文件的图标
- 3h精通OpenCV(一)- 读取图像视频与网络摄像头
- 清华寒门女孩毕业演讲刷爆网络:世界本不公平,努力是你唯一的路!
- Camera 初始化(Preview) 二(HAL3的流程)
- OpenProj打开不了或者提示Failed to load Java VM Library的错误的解决方案
- java pv uv_使用Spark计算PV、UV
- 几款极好的 JavaScript 文件上传插件
- 编译原理-回溯法及其优化的思考
- opencv-python学习笔记-2对比度增强——研0基础学习
- English trip V2 - 24 Making Predictions Teacher: Taylor
- gophish配合邮件服务器,【CS】Cobalt Strike发送钓鱼邮件
- 宏观经济学和微观经济学
热门文章
- 惠普笔记本固态装系统。
- 【奥特曼迪迦表情包】
- 【无标题】VisualStudio2022断点调试
- 如何才能得到YouTube的流量?
- [美]杰克·韦尔奇《赢》
- 小红书618品牌营销蓄水阶段告一段落,5月即将进入冲刺期
- zlib库使用简单讲解
- 有适合宝妈在家做的兼职推荐吗?5个适合在家做的副业兼职!
- nextvlad:一个用于大规模视频分类的聚集帧级特征的有效神经网络 NeXtVLAD: An Efficient Neural Network toAggregate Frame-level Fea
- php- 秒的转换 (天 小时 分钟) (小时 分钟 )