功能实现
机械单价包含三个部分:一个是机械单价分类,一个是机械单价,一个是机械单价明细。机械分类的是一个下拉树,可以对其进行新增,删除和修改它的节点。当点击机械分类时,机械单价会出现相应的数据。
机械单价数据处理包括添加、修改、删除、复制、粘贴、导入、导出 。
对于机械单价的导出、导入:系统将自动给出一个路径,把机械单价的所有数据导入到一张Excel表。导入:先手动填写一些数据,这些数据要根据数据库的参数来写,一一对应才能导入到
机械单价的表里。导入之前先选择要导入的文件。
机械单价的点击一下机械单价的添加、会弹出一张表,进行添加。而修改、 是在datagrid里面操作的。
机械单价的复制、粘贴:复制现有的数据,复制后的数据代号后会有”复制“两字,还有整数进行区分。然后进行粘贴到最后一行。
机械单价的查询分为多条件模糊查询和多条件精确查询:查询分为:根据代号、名称、名称的首字母查询,当选中下拉框方式中的代号,如果不选中模糊先查询,则为精确查询,反之,则为模糊查询。
如果是被使用过的数据就会记录下来,你可以根据是否显示已使用来查询使用过的数据。
//下面就是生成这个界面的html代码;
<div>
<table>
<tr>
<td>
<div class="easyui-panel" title=" 机械分类" style="width:260px;height:650px; right: 333px;" data-options="iconCls:'icon-save',tools:'#tt'">
<ul class="easyui-tree" id="TreShuXing" data-options="onClick:onClickRowMingXi,onAfterEdit:onAfterEdit">
</ul>
</div>
<div id="tt" style="height:auto">
<a οnclick="xingzengshuxing()" href="javascript:void(0)" class="icon-add "></a>
<a οnclick="xiugai()" href="javascript:void(0)" class="icon-edit" ></a>
<a οnclick="shanqujiedian()" href="javascript:void(0)" class="icon-cut" ></a>
<a href="javascript:void(0)" class="icon-help" ></a>
</div>
</td>
<td>
<div style="width:730px;">
<table>
<tr>
<a οnclick="tianjia()"><input id="tianjia" type="submit" value="添加" /></a>
<a οnclick="deleteline()" ><input id="shanqu" type="submit" value="删去" /></a>
<a οnclick="copy()" ><input id="fuzhi"type="submit" value="复制" /></a>
<a οnclick="paste()" ><input id="zhantie" type="submit" value="粘贴" /></a>
<form action="/JiXieDanJia/GetTableFromExcel" method="post" enctype="multipart/form-data">
<text>选择上传文件</text>
<input name="file1" type="file" id="file" />
<input type="submit" name="Upload" value="导入" />
</form>
<a οnclick="modification()" ><input type="submit" value="修改一行" /></a>
<td><a οnclick="daochu()" ><input type="submit" value="导出" /></a></td>
</tr>
</table>
</div>
<div class="easyui-panel" style="width:1030px;height:620px" data-options="noheader:true" >
机械单价: 关键之查询:<input id="guanjianzichanxun" data-options="onChange:ww" />方式:<input class="easyui-combobox" id="fangshi" /><input type="checkbox"id="yishiyong" />仅显示已使用<input type="checkbox"id="chaxun" />模糊查询
<a οnclick="ww()" ><input id="" type="submit" value="查询" /></a>
<table id="w机械单价"class="easyui-datagrid" style="width:1000px;height:220px" data-options="onClickRow:onClickRow,singleSelect:true,onAfterEdit:onAfter,fitColumns:true" >
<thead frozen="true">
<tr>
<th field="Code" width="150">代号</th>
<th field="Name" width="100"editor="text" >名称</th>
<th data-options="field:'Unit',align:'center',width:80,
formatter:function(value,row){
return row.NatureGatherDetailName;
},
editor:{
type:'combobox',
options:{
valueField:'NatureGatherDetailID',
textField:'NatureGatherDetailName',
url:'/JiXieDanJia/bandingdanwei/'
}
}
"> 单位</th>
</tr>
</thead>
<thead>
<tr>
<th colspan="2">一类(机械)</th>
<th colspan="2">二类(人工)</th>
<th colspan="2" >三类(材料)</th>
</tr>
<tr>
<th field="jixiedanjiaID" width="60" align="right" hidden="true">机械单价ID</th>
<th field="jixiedanjiafenleiID" width="60" align="right" hidden="true">机械单价分类ID</th>
<th field="cost1" width="60" align="right">费用</th>
<th field="xishu" width="60" align="right">系数</th>
<th field="cost2" width="60" align="right">费用</th>
<th field="xishu1" width="60" align="right">系数</th>
<th field="cost3" width="60" align="right">费用</th>
<th field="系数2" width="60" align="right">系数</th>
<th field="BudgetPrice" width="80" align="right">预算单价</th>
<th field="Remark" width="100" align="right"editor="text">备注</th>
</tr>
</thead>
</table>
<div>
<a οnclick="addwindow1()" ><input type="submit" value="添加" /></a>
<a οnclick="deletedetailed()" ><input type="submit" value="删去" /></a>
<a οnclick="replace1()" ><input type="submit" value="替换" /></a>
<a οnclick="btn_copydetailed()"><input type="submit" value="复制" /></a>
<a οnclick="btn_pastedetailed()" ><input type="submit" value="粘贴" /></a>
<a οnclick="btn_finish()" ><input type="submit" value="修改一行" /></a>
</div>
<table id="w机械组成" class="easyui-datagrid" style="width:1000px;height:220px"data-options="onClickRow:onClickRowMachineryconstitute,singleSelect:true,onAfterEdit:onAfterconstitute" >
<thead>
<tr>
<th field="MachineryComeposeID" width="60" align="right" hidden="true">机械组成ID</th>
<th field="MachineryPriceID" width="60" align="right" hidden="true">机械单价ID</th>
<th field="Code" width="100" align="right">代号</th>
<th field="Name" width="100" align="right">名称</th>
<th field="Unit" width="100" align="right">单位</th>
<th field="BudgetPrice" width="100" align="right">预算价格</th>
<th field="ComBineGetPrice" width="100" align="right">合价</th>
<th field="CountNumber" width="100" align="right"editor="text">计算数量</th>
<th data-options="field:'MachineryType',align:'center',width:80"> 类型</th>
</tr>
</thead>
</table>
</div>
</td>
</tr>
</table>
</div>
//下面就是左边绑定下拉树的代码:
第一步:存储过程的代码
第二步:逻辑层的代码:
//查询绑定下拉树
public DataTable ChaXunShuXing(int ID)
{
SqlParameter[] SQlCMDpas = {
new SqlParameter("@Type", SqlDbType.Char),
new SqlParameter("BuildProjectID",SqlDbType.Char),
};
SQlCMDpas[0].Value = "ChaXunShuXing";
SQlCMDpas[1].Value = ID;
DataTable dt = niaho.DAL_SelectDB_Par("JiXieDanJia", SQlCMDpas);
return dt;
}
第三步:控制器的代码:
查询绑定下拉树:
//查询下拉树
public ContentResult ChaXunShuXing(string ID)
{
DataTable dt = niaho.ChaXunShuXing(Convert.ToInt32(ID));//这方法就是调用了逻辑层的代码:
StringBuilder stringbuilder = new StringBuilder();//实例化
stringbuilder.Append(GetDataString(dt, "0"));//这就是调用下面的方法
var r = GetDataString(dt, "0");//这是一个调用下面的方法
if (r.Length > 0)//这是用它查出来有多少行来判断,如果小于0,就返回一个1
{
stringbuilder = stringbuilder.Remove(stringbuilder.Length - 2, 2);
return Content(stringbuilder.ToString());
}
else
{
return Content("1");
}
}
public string GetDataString(DataTable dt, string id)//这就是上面调用的方法
{
StringBuilder stringbuilder = new StringBuilder();//实例化
DataView dv = new DataView(dt);//把查出来的数据放到一个新的dataview里面
dv.RowFilter = "MachineryPriceClassesFurID=" + id;//这就是通过父ID来赛选它是否还有子节点
DataTable dtChild = dv.ToTable();// 这就是查出的所有子节点
if (dtChild.Rows.Count > 0)//如果数量大于0,就还有子节点
{
stringbuilder.Append("[");
for (int i = 0; i < dtChild.Rows.Count; i++)
{
string leiid = dtChild.Rows[i]["MachineryPriceClassesID"].ToString();//这就是主键ID
string chidstring = GetDataString(dt, dtChild.Rows[i]["MachineryPriceClassesID"].ToString());//这就是循环调用自身的方法,来判断是否还有子节点
if (!string.IsNullOrEmpty(chidstring))//这是判断,如果有子节点就执行这个方法,否则就else
{
stringbuilder.Append("{ \"id\":\"" + dtChild.Rows[i]["MachineryPriceClassesID"].ToString() + "\",\"text\":\"" + dtChild.Rows[i]["MachineryPriceClassesName"].ToString() + "\",\"state\":\"closed\",\"children\":");
stringbuilder.Append(chidstring);
}
else
{
stringbuilder.Append("{\"id\":\"" + dtChild.Rows[i]["MachineryPriceClassesID"].ToString() + "\",\"text\":\"" + dtChild.Rows[i]["MachineryPriceClassesName"].ToString() + "\"},");
}
}
stringbuilder.Replace(",", "", stringbuilder.Length - 1, 1);//这是一个把逗号替换成空
stringbuilder.Append("]},");//收尾
}
return stringbuilder.ToString();//把值返回给上面调用它方法
}
//第四步:界面层
查询绑定下拉树
$(document).ready(function () {//一打开界面就执行的方法
$('#TreShuXing').tree({ url: '/JiXieDanJia/ChaXunShuXing?ID='+@Session["项?目?ID"] });//这就是调用了控制器的方法,返回数据就绑定给下拉树
});
//下面就是下拉树添加的方法;
第一步:添加下拉树存储过程
第二步:添加下拉树逻辑层
public int InsertJiXieDanJia(string MachineryPriceClassesName, int MachineryPriceClassesFurID, int BuildProjectID)
{
SqlParameter[] mySQL = {
new SqlParameter("@type",SqlDbType.Char),
new SqlParameter("@MachineryPriceClassesName",SqlDbType.Char),
new SqlParameter("@MachineryPriceClassesFurID",SqlDbType.Int),
new SqlParameter("@BuildProjectID",SqlDbType.Int),
};
mySQL[0].Value = "InsertJiXieDanJia11";
mySQL[1].Value = MachineryPriceClassesName;
mySQL[2].Value = MachineryPriceClassesFurID;
mySQL[3].Value = BuildProjectID;
int i = niaho.DAL_OPTableDB_Par("JiXieDanJia", mySQL);
return i;
}
第三步:添加下拉树控制器:
public ContentResult InsertJiXieDanJia(string MachineryPriceClassesName, string MachineryPriceClassesFurID, string BuildProjectID)
{
int i = niaho.InsertJiXieDanJia(MachineryPriceClassesName, Convert.ToInt32(MachineryPriceClassesFurID), Convert.ToInt32(BuildProjectID));//这是调用逻辑层的方法
string k = i.ToString();
return Content(k);
}
第四步:添加下拉树界面层:
//新增节点
function xingzengshuxing() {
$.getJSON("/JiXieDanJia/ChaXunShuXing?ID=" + @Session["项目ID"],
function (data) {//这是调用了上面查询绑定下拉树得方法
if(data==1){//这就是返回的值,用来判断,如果一行数据也没有就,新增父节点
$.getJSON("/JiXieDanJia/InsertJiXieDanJia?MachineryPriceClassesName=" + "(末命名)" + "&"
+ "MachineryPriceClassesFurID=" + 0 + "&"
+"BuildProjectID="+ @Session["项目ID"],
function (data) {
expand();//新增完就展开下拉树,下面就有展开下拉树的方法
alert("已成功添加到你选中的节点下了,请你及时编制");
});
}
else{
var o = $('#TreShuXing').tree('getSelected');
if (o) {
if (confirm('是否添加节点?,添加完成要编制窝')) {//这就是判断它是否新增;
$.getJSON("/JiXieDanJia/InsertJiXieDanJia?MachineryPriceClassesName=" + "(末命名)" + "&"
+ "MachineryPriceClassesFurID=" + ID + "&"
+"BuildProjectID="+ @Session["项目ID"],
function (data) {
expand();//这就是展开下拉树
alert("已成功添加到你选中的节点下了,请你及时编制");
});
}else{
}
}
else {
alert("请选择左边的下拉树");
}
}
});
}
//展开下拉树
//展开下拉树
function expand() {
$('#TreShuXing').tree({ url: '/JiXieDanJia/ChaXunShuXing?ID='+@Session["项目ID"] });//这是查询一遍
setTimeout(function () { expandf(); }, 500); //这是一个延迟执行的方法
}
function expandf() {
$('#TreShuXing').tree('expandAll');//这就是展开所有节点的方法
}
下面就是修改下拉树节点的方法:
第一步:修改下拉树存储过程的代码
第二步:修改下拉树逻辑层的代码
public int UpdateJiXieDanJia(int MachineryPriceClassesFurID, string MachineryPriceClassesName)
{
SqlParameter[] mySQL = {
new SqlParameter("@type",SqlDbType.Char),
new SqlParameter("@MachineryPriceClassesID",SqlDbType.Int),
new SqlParameter("@MachineryPriceClassesName",SqlDbType.Char),
};
mySQL[0].Value = "UpdateJiXieDanJia";
mySQL[1].Value = MachineryPriceClassesFurID;
mySQL[2].Value = MachineryPriceClassesName;
int i = niaho.DAL_OPTableDB_Par("JiXieDanJia", mySQL);
return i;
}
第三步:修改下拉树控制器的代码
public ContentResult UpdateJiXieDanJia(string MachineryPriceClassesFurID, string MachineryPriceClassesName)
{
int i = niaho.UpdateJiXieDanJia(Convert.ToInt32(MachineryPriceClassesFurID), MachineryPriceClassesName);
string k = i.ToString();
return Content(k);
}
第四步:修改下拉树界面层代码
var g = "";
function xiugai() {
if (confirm('是否编制节点?')) {
g = 1;//点击确定g就等于1,就可以进行下面下拉树的编制
} else {
}
}
function onClickRowMingXi(index) {
if(g==1){
$('#TreShuXing').tree('beginEdit', index.target);//这就是开始编制下拉树
g=2;//g等于2,就是一结束编制就不能再一次编制,只能重新点击确定编制
}
else{
}
}
//结束编制立马就进行下拉树的修改
function onAfterEdit(dd, jj, kk) {//这就是结束编制之后执行的方法
$.getJSON("/JiXieDanJia/UpdateJiXieDanJia?MachineryPriceClassesFurID=" + dd.id + "&"
+ "MachineryPriceClassesName=" + dd.text + "&"
,
function (data) {
alert("修改成功");
});
}
//下面就是下拉树的删去操作
第一步:删去下拉树存储过程
第二步:删去下拉树逻辑层的代码
public DataTable IDChaXunJieXieDanJia(int parentID)
{
SqlParameter[] SQlCMDpas = {
new SqlParameter("@Type", SqlDbType.Char),
new SqlParameter("@MachineryPriceClassesFurID", SqlDbType.Int)
};
SQlCMDpas[0].Value = "IDChaXunJieXieDanJia";
SQlCMDpas[1].Value = parentID;
DataTable dt = niaho.DAL_SelectDB_Par("JiXieDanJia", SQlCMDpas);
return dt;
}
删去子节点的代码;
public int ShanChuJieXieDanJia(int childID)
{
SqlParameter[] SQlCMDpas = {
new SqlParameter("@type", SqlDbType.Char),
new SqlParameter("@MachineryPriceClassesID", SqlDbType.Int),
};
SQlCMDpas[0].Value = "ShanChuJieXieDanJia";
SQlCMDpas[1].Value = childID;
int i = niaho.DAL_OPTableDB_Par("JiXieDanJia", SQlCMDpas);
return i;
}
删去父节点的代码:
public int deleteJiXieDanJiajiedianFuQingJieDian(int MachineryPriceClassesID)
{
SqlParameter[] mySQL = {
new SqlParameter("@type",SqlDbType.Char),
new SqlParameter("@MachineryPriceClassesID",SqlDbType.Int),
};
mySQL[0].Value = "deleteJiXieDanJiajiedianFuQingJieDian";
mySQL[1].Value = MachineryPriceClassesID;
<pre name="code" class="csharp"> public ContentResult deleteJiXieDanJiajiedianFuQingJieDian(string MachineryPriceClassesID)
{
int i = niaho.deleteJiXieDanJiajiedianFuQingJieDian(Convert.ToInt32(MachineryPriceClassesID));//这是调用逻辑层的删去父节点的代码
string k = i.ToString();
return Content(k);返回给界面层
}
//第三步:删去下拉树控制器的代码
public ContentResult deleteJiXieDanJiajiedian(string MachineryPriceClassesFurID)
{
childdelete(Convert.ToInt32(MachineryPriceClassesFurID));//这是调有下面的方法
return Content("true");//跳转到资料主页面
}
public void childdelete(int parentID)
{
DataTable dtf = niaho.IDChaXunJieXieDanJia(parentID);//这就是调用逻辑层的代码把所有数据都查出来
int rcount = dtf.Rows.Count;//获取总行数
if (rcount > 0)
{
for (int i = 0; i < rcount; i++)
{
int childID = Convert.ToInt32(dtf.Rows[i]["MachineryPriceClassesID"]);
childdelete(childID);//这是调用自身的方法,查找是否还有下一级,有就继续删去
niaho.ShanChuJieXieDanJia(childID);//这是调用逻辑层的代码,进行子节点的删去
}
}
else
{
return;
}
}
删去父节点
public ContentResult deleteJiXieDanJiajiedianFuQingJieDian(string MachineryPriceClassesID)
{
int i = niaho.deleteJiXieDanJiajiedianFuQingJieDian(Convert.ToInt32(MachineryPriceClassesID));//这是调用逻辑层的删去父节点的代码
string k = i.ToString();
return Content(k);返回给界面层
}
第四步:删去下拉树界面层的代码
function shanqujiedian() {
var row = $('#TreShuXing').tree('getSelected');
if (row) {
$.getJSON("/JiXieDanJia/deleteJiXieDanJiajiedian?MachineryPriceClassesFurID=" + ID,
function (data) {//这是删去子节点的方法
$.getJSON("/JiXieDanJia/deleteJiXieDanJiajiedianFuQingJieDian?MachineryPriceClassesID=" + ID,
function (data) {//这是删去父节点的方法
expand();
alert("删去成功");
});
})
}
}
仅供学习,禁止用于商业用途