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

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

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

3.4功能4名称:材料单价

3.4-1功能实现

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

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

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

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

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

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

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

 3.4-1.1  材料单价主图:

凯云水利水电造价工程系统 (三) 材料单价模块(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

 

交货等级

 

 

 

 

各个表的关系如下:


凯云水利水电造价工程系统 (三) 材料单价模块(1)_第2张图片

(图 2)

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

 3.4-3.1 控件的使用

3.4-3.1.1 动态下拉树(tree)

(1)动态下拉树截图

凯云水利水电造价工程系统 (三) 材料单价模块(1)_第3张图片 

(图 3)

(2)动态下拉树界面代码:

 

    (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,把数据赋值给dv
    
                dv.RowFilter = "父ID=" + id;//
    
                DataTable dtChild = dv.ToTable();//转换成DataTable
    
                if (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效果截图

    凯云水利水电造价工程系统 (三) 材料单价模块(1)_第4张图片

    (图 4)

    (2)datagrid界面代码:

    
              // data-options里面设置的是datagr的属性。singleSelect设置是否单选, onClickRow单击事件
              
                 // field:列名,用于传参数,而建立项目ID是界面显示的列名
                
    建立项目ID材料单价ID 材料单价分类ID 代号 名称 单位 材料原价 包装费 运杂费 采购保管费 运输保险费 预算价格 材料单价分类 是否主材 业主供材

    (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)控制器的数据传入到界面的代码:

     public ActionResult SelectAllCaiLiao(string BuildProjectID)
            {
                DataTable dt = myCaiLiaoDanJia.SelectAllCaiLiao(Convert.ToInt32(BuildProjectID));
                      // Convert.ToInt32是把一个字符串型强制转换成int
                List> 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'
       begin
       SELECT     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, Unit
                ltrim(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 JOIN
                  SYS_MaterialPriceClassesList ON SYS_MaterialPriceList.MaterialPriceClassesID = SYS_MaterialPriceClassesList.MaterialPriceClassesID INNER JOIN
                  SYS_BuildProjectList ON SYS_MaterialPriceList.BuildProjectID = SYS_BuildProjectList.BuildProjectID
    where    SYS_BuildProjectList.BuildProjectID=@BuildProjectID           
     end
    

    3.4-3.1.3 panel窗体

    (1)panel窗体截图:

    凯云水利水电造价工程系统 (三) 材料单价模块(1)_第5张图片

    (图 5)

    (2)panel窗体界面代码:

    // iconCls:'icon-save'就是窗体里材料分类前的图标 // tools:'#tt' 就是那些按钮
    //就是那个加号按钮

    3.4-3.1.4  checkbox

    (1) checkbox截图:

    凯云水利水电造价工程系统 (三) 材料单价模块(1)_第6张图片

    (图 6)

    (2) checkbox:界面代码

     仅显示已使用
       
    模糊查询   
    

    (3)在datagrid中的check的界面代码:

    是否主材 
     //首先要在是否主材这一列调用一个 formatter事件,onCheck方法写在
                        
                        

    你可能感兴趣的:(MVC,项目解析)