凯云水利水电造价工程系统 (三)  材料单价模块(新增)

3.3-3模块功能的具体实现

3.4功能4名称:材料单价

3.4-1功能实现

材料单价包含两个部分:一个是材料分类,一个是材料单价。材料分类的是一个下拉树,可以对其进行新增,删除和修改它的节点。当双击材料分类时,材料单价会出现相应的数据。

材料单价数据处理包括添加、修改、删除、复制、粘贴、导入、导出、还可以隐藏分类列表、显示分类列表。

对于材料单价的导出、导入:系统将自动给出一个路径,把材料单价的所有数据导入到一张Excel表。导入:先手动填写一些数据,这些数据要根据数据库的参数来写,一一对应才能导入到

材料单价的表里。导入之前先选择要导入的文件。

材料单价的添加、修改、删除:当点击添加按钮时,会弹出一个窗体,里面会有相应的文本框进行填写相应要添加的字段,然后进行保存。修改,对原有的数据进行修改,然后进行保存。删除选中的数据。

材料单价的复制、粘贴:复制现有的数据,复制后的数据代号后会有”复制“两字,进行区分。然后进行粘贴到最后一行。

材料单价的查询分为模糊查询和精确查询:查询分为:根剧代号、名称、名称的首字母查询,当选中方式中的代号,如果不选中模糊先查询,则为精确查询,反之,则为模糊查询。

3.4-1.1  材料单价主图:

(图 1)

3.4-2材料单价表和关系

材料单价所涉及到的表有:材料分类表(MaterialPriceClassesList)、材料单价表(MaterialPriceList)、属性集合表(NatureGatherList)、属性明细表(NatureGatherDetailList)、建立项目表(BuildProjectList)、定额表(QuoteEditionList),运输项目表(Sys_YunShuXiangMuBiao),运杂费表(YunZaFeiBiao)

材料单价表的主要字段有:建立项目ID、材料单价ID、材料单价分类ID、代号、名称、单位、材料原价,  包装费,  运杂费,采购及保管费、运输 保 险费、预算价格、是否主材、业主供材。

运输项目表(Sys_YunShuXiangMuBiao)的主要字段:运输项目ID、材料单价ID、运输项目、费用。

运杂费表(YunZaFeiBiao)的主要字段:YunShuXiangMuID,运输起点, 装车费, 每公里运费,运距, 系数, 装载系数,卸车费, 其它, 计算公式,每吨运杂费, 交货地点, 交货条件,交货等级

SYS_MaterialPriceList

資料表名稱

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)

(1)动态下拉树截图

 

(图 3)

(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)相关推荐

  1. 凯云水利水电工程造价系统 (三) 材料单价 (2)

    凯云水利水电工程造价系统 (二) 材料单价 (2) 接着上一篇的材料单价 (1) 3.4-3.2.2.2修改 (1)当点击材料单价的修改按钮时,就会弹出修改材料单价的窗体: (图 1) (2)修改之前 ...

  2. 凯云水利水电工程造价系统 (五) 补充定额

    凯云水利水电工程造价系统 (五) 补充定额 3.10 功能9名称:补充定额 3.10-1 功能实现 补充定额数据的处理:添加.删除.复制.粘贴.导入.导出 补充定额的添加,删除:击添加会出现一个窗体, ...

  3. 凯云水利水电工程造价系统 (四) 配合比单价模块

    凯云水利水电工程造价系统  (四) 配合比单价模块 3.6-1功能实现 配合比单价的数据处理有:添加.批量修改.从定额导入.删除.复制.粘贴.导入.导出. 配合比单价的添加.批量修改.删除:点击添加会 ...

  4. 凯云水利水电工程造价系统 (四)配合比单价(2)

    凯云水利水电工程造价系统 (四)配合比单价(2) 3.6-3.1.2 配合比单价明细 3.6-3.1.2.1  添加 (1)添加配合比单价明细,点击添加按钮: (图 23) 当你单击材料单价中材料列表 ...

  5. 凯云水利水电工程造价管理系统 技术解释(十三) 中间单价(四)

    中间单价 功能实现 中间单价包含三个部分:一个是中间单价列表,一个是中间单价定额组成表,一个是中间单价定额人材机组成表,中间单价列表,你可以对其进行新增,删除和修改.当点击时,点击添加会在datagr ...

  6. 凯云水利水电工程造价管理系统 技术解析(四)取费管理(一)

    取费管理 3.7-1 功能实现 取费管理的数据处理主要有:添加.删除.复制.粘贴.导出.导入 取费管理的添加,会弹出一个窗体,里面只有取费分类列表名,而其它的字段可以双击列名为名称和单位那两列时,会弹 ...

  7. 凯云水利水电工程造价管理系统 技术解析(七) 机械单价(二)

    机械单价 功能实现: 机械单价包含三个部分:一个是机械单价分类,一个是机械单价,一个是机械单价明细.机械分类的是一个下拉树,可以对其进行新增,删除和修改它的节点.当点击机械分类时,机械单价会出现相应的 ...

  8. 水利水电安装工程项目管理信息系统

    水利水电安装工程项目管理信息系统 近些年来,伴随着社会的进步和经济的发展,水利水电工程规模和数量同样获得了良好的发展空间,在一定程度上推动了工程各项技术的创新和发展.然而在水利水电工程施工过程中存在诸 ...

  9. 打造云原生大型分布式监控系统(三): Thanos 部署与实践

    视频 附上本系列完整视频 打造云原生大型分布式监控系统(一): 大规模场景下 Prometheus 的优化手段 打造云原生大型分布式监控系统(一): 大规模场景下 Prometheus 的优化手段_哔 ...

最新文章

  1. Objective-C 什么是类
  2. 针对安全探索的受限强化学习:原始对偶优化算法
  3. java.lang.ExceptionInInitializerError的原因
  4. 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈
  5. 2010-2011年中国嵌入式开发从业人员调查报告隆重推
  6. MFC的程序,不想显示窗口,任务栏里也不显示
  7. C语言数据结构编程实列,数据结构C语言实现----栈的实例
  8. 数学建模 图论最短路径问题
  9. 修改 VC 生成的 EXE 文件的图标
  10. 3h精通OpenCV(一)- 读取图像视频与网络摄像头
  11. 清华寒门女孩毕业演讲刷爆网络:世界本不公平,努力是你唯一的路!
  12. Camera 初始化(Preview) 二(HAL3的流程)
  13. OpenProj打开不了或者提示Failed to load Java VM Library的错误的解决方案
  14. java pv uv_使用Spark计算PV、UV
  15. 几款极好的 JavaScript 文件上传插件
  16. 编译原理-回溯法及其优化的思考
  17. opencv-python学习笔记-2对比度增强——研0基础学习
  18. English trip V2 - 24 Making Predictions Teacher: Taylor
  19. gophish配合邮件服务器,【CS】Cobalt Strike发送钓鱼邮件
  20. 宏观经济学和微观经济学

热门文章

  1. 惠普笔记本固态装系统。
  2. 【奥特曼迪迦表情包】
  3. 【无标题】VisualStudio2022断点调试
  4. 如何才能得到YouTube的流量?
  5. [美]杰克·韦尔奇《赢》
  6. 小红书618品牌营销蓄水阶段告一段落,5月即将进入冲刺期
  7. zlib库使用简单讲解
  8. 有适合宝妈在家做的兼职推荐吗?5个适合在家做的副业兼职!
  9. nextvlad:一个用于大规模视频分类的聚集帧级特征的有效神经网络 NeXtVLAD: An Efficient Neural Network toAggregate Frame-level Fea
  10. php- 秒的转换 (天 小时 分钟) (小时 分钟 )