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