惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
P
Palo Alto Networks Blog
大猫的无限游戏
大猫的无限游戏
量子位
S
Secure Thoughts
博客园 - 【当耐特】
V
Visual Studio Blog
腾讯CDC
爱范儿
爱范儿
Webroot Blog
Webroot Blog
The Register - Security
The Register - Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Latest news
Latest news
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
Cloudbric
Cloudbric
T
Troy Hunt's Blog
S
Security @ Cisco Blogs
B
Blog RSS Feed
I
Intezer
S
SegmentFault 最新的问题
N
News and Events Feed by Topic
云风的 BLOG
云风的 BLOG
C
CXSECURITY Database RSS Feed - CXSecurity.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
TaoSecurity Blog
TaoSecurity Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Recorded Future
Recorded Future
Google DeepMind News
Google DeepMind News
Forbes - Security
Forbes - Security
雷峰网
雷峰网
博客园 - 司徒正美
C
Cisco Blogs
S
Securelist
L
LINUX DO - 最新话题
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
N
News | PayPal Newsroom
N
News and Events Feed by Topic

博客园 - 毛小华

如果数据库的处理(逗号) 今天碰到了http/1.1 403 Forbidden错误,处理如下 防止多次提交的几个比较 - 毛小华 - 博客园 SQL server 产生按日期排序的编号 sql数据库的连接的一句话(今天花了一个小时想明白的就记下来了) 一个很简单的操作excel的例子 - 毛小华 - 博客园 一个自己测试通过的操作EXCEL 一个自己测试通过的发邮件操作 - 毛小华 - 博客园 控制界面是否可输入的一个例子 - 毛小华 - 博客园 今天电脑中毒了 WebPanelBar的使用 AlertButton 一个经验 一些感觉。 sql 语句中where条件和jion on条件的区别 asp.net 的经验 出现怪事啦,大家看啦 erp的设计经验 如果输入的dll名字被改后应该手工删除dll
一棵树 Bom树
毛小华 · 2005-09-15 · via 博客园 - 毛小华

目前做一个制造业的ERP,要处理一个Bom,里面的阶数和节点数未知。
就是一棵复杂一点的客户端树(能与服务端交互),问了几个朋友,都爱莫能助,只好自己写了。
比较乱,不知道是否说清楚了,但愿能给你一点点的帮助。
一、环境 .net1.1 + javascript
二、关键字:树 Bom  Bom树 javascript树
三、主要功能:
1、框架是左边树右边内容,两边要可以交互,即点击左边节点右边要能显示内容,右边内容保存或删除或建子节点要即时的更新左边的树。
2、树是一层一层打开的,所有的树的HTML都是有代码生成,可以无限节点,无限阶数(当然速度有影响)。
3、第一次打开读数据库,第二次要显示的时候就不必读数据库,第二次显示只是改变visible。
四、主要代码
1、javascript部分(主树)  RemoteBigServer.js

/*------------------------------------下面是树的操作----------------------------------------*/

var m_MaginWith = 14;
var m_ImageWith = 9;
var m_UrlPkid = "BomContentMaterial.aspx?PKID=";
var m_UrlMat = "BomContentProduct.aspx?MaterialNo=";
var m_UrlRemote = "../CommonPage/BomServer.asmx";
var m_ContentPre = "Content";
var m_ImgPre = "Img";
var m_ContentFormTag = "main";
var m_iamgeSpace = "../Images/treeicon/space.gif";
var m_iamgeMinus = "../Images/treeicon/minus.gif";
var m_iamgePlus = "../Images/treeicon/plus.gif";



//other root use pkid as mark
//
e.g. :divPKID + pkid   ; content + pkid ; img + pkid
function OnTurnIt()
{
    
var DivCurrent = event.srcElement.parentElement;    
    
if (DivCurrent.tagName == 'TD')
        DivCurrent 
= event.srcElement;
        
    
var strPKID = DivCurrent.id.substring(7);    
    
    
var objContent = document.getElementById(m_ContentPre + strPKID);
    
var objDivContent = document.getElementById("divContent" + strPKID);
    
var objImage = document.getElementById(m_ImgPre + strPKID);
    
if (objContent == null)
    {
    
        
var result = StartGetReomte(strPKID);
        
//if No Detail  Return  NoData 
        var divObj = document.getElementById("divContent" + strPKID);
        
if (result == null || result == "" || result == "nodata" )
        {
            
//if clear, has a space
            //divObj.innerHTML = "";   
            return ;
        }
        
        
var strHTML = CombineHTML(result,strPKID);        
        
        
        divObj.innerHTML 
= strHTML;
            
    
//    DivCurrent.insertAdjacentHTML( "afterEnd", strHTML);  
        
        objImage.src
= m_iamgeMinus;
        
    }
    
else
    {
        
if (objContent.style.display=="none"
        {
            objDivContent.style.display
="";
            objContent.style.display
="";
            objImage.src
= m_iamgeMinus;
        }
        
else
        {
            objDivContent.style.display
="none"
            objContent.style.display
="none"
            objImage.src
= m_iamgePlus;
        }
    }
}

function StartGetReomte(strPKID)
{
    
var SoapBody = "<strPKID>"+ strPKID + "</strPKID>";
    
var MethodName = "GetBomDetailByPKID";
    
var result = RemoteRun(m_UrlRemote, MethodName, SoapBody);
    
    
return result;
}


//Fill
function CombineHTML(result,strParentpkid)
{
    
var strBlockHtml = "";
    
var strExPrefix = "<table width='100%' border='0' id='" + m_ContentPre + strParentpkid + "'><tr><td width='"+ m_MaginWith 
                        
+ "'></td><td><table width='100%' border='0'>"                    
    
var strExSuffix = "</table></td></tr></table>";
    
    
var objRow = result.split('|');
    
if (objRow.length <= 0)
    {
        
return;
    }
            
    
for(var i = 0 ;i <objRow.length ; i++)
    {
        
if (objRow[i] == "")
        {
            
continue;
        }
        
        
var objcolumn = objRow[i].split(',');
        
        
if (objcolumn.length != 3)
        {
            
continue;
        }
        
        
//objRow Has Three Value: PKID ,MaterialNo    , HasChild
        var strDetailPKID        = objcolumn[0];
        
var MaterialNo            = objcolumn[1];
        
var hasChild            = objcolumn[2];
        
        
var imageSrc = m_iamgePlus;
        
if (hasChild==0)
        {
            imageSrc 
= m_iamgeSpace;
        }
                
        
var contentPre = "<tr><td><div style='CURSOR: hand'id='divPKID"+ strDetailPKID +"' onmouseup=OnTurnIt();>";
        
var contentSuf = "</div><div id='divContent"  + strDetailPKID + "'></div></td></tr>"
        
        
var content = "<IMG id='" + m_ImgPre + strDetailPKID + "' width=" + m_ImageWith + " src='" + imageSrc + "'><A href='" + m_UrlPkid + strDetailPKID + "' target='" + m_ContentFormTag + "'>" + MaterialNo + "</A>";

        strBlockHtml 
+= contentPre + content + contentSuf;
        
    }
    
    
if (strBlockHtml != "")
    {
        strBlockHtml 
= strExPrefix + strBlockHtml + strExSuffix;
    }
    
    
return strBlockHtml;
}

function RemoteRun(page, Method, SoapBody)
{
    
var url = page + "?methodname=" + Method;
    
var xmlhttp,dom,node,xmlDOC;
    
    
var SoapHead = "<?xml version='1.0' encoding='utf-8'?>" +
                    
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><" + Method + " xmlns='http://localhost'>";
    
var SoapTail = "</" + Method + "></soap:Body></soap:Envelope>";

    
var SoapRequest = SoapHead + SoapBody + SoapTail;
    
    xmlhttp 
= new ActiveXObject("Msxml2.XMLHTTP");
    xmlhttp.Open(
"POST",url,false);
    xmlhttp.setRequestHeader(
"Content-Type""text/xml;charset=utf-8");
    xmlhttp.setRequestHeader(
"SOAPAction""http://localhost/"+Method);
    xmlhttp.setRequestHeader(
"Content-Length",SoapRequest.length);
    xmlhttp.Send(SoapRequest);
    
    
if( xmlhttp.Status == 200 )
    {
        
var result = xmlhttp.responseXML.getElementsByTagName(Method + "Result");
        
if(result)
        {
            
return result(0).text;
        }
    }

    
return "fail,check network!";
}
//other root tree
/*
------------------------------------上面是树的操作----------------------------------------*/



//first root use materialno as mark
//
e.g. :div + materialNo   ; content + materialNo ; img + materialNo
function OnProductTurnIt()
{
    
var DivCurrent = event.srcElement.parentElement;    
    
if (DivCurrent.tagName == 'TD')  //如果指向了上一级,就指回来
        DivCurrent = event.srcElement;
        
    
var strMaterialNo = DivCurrent.id.substring(6);    
    
var strMatVersion = document.getElementById("txtVersion").value;
    
    
if (strMaterialNo == "")
        
return;
    
    
var objContent = document.getElementById(m_ContentPre + strMaterialNo);
    
var objImage = document.getElementById(m_ImgPre + strMaterialNo);
    
if (objContent == null)
    {    
        
var result = StartGetReomteByMat(strMaterialNo,strMatVersion);
        
//if No Detail  Return  NoData 
        
        
var divObj = document.getElementById("divContent" + strMaterialNo);
        
if (result == null || result == "" || result == "nodata" )
        {
            
//divObj.innerHTML = "";
            return ;
        }
        
/**/
        
        
var strHTML = CombineHTML(result,strMaterialNo);    
        
        
        divObj.innerHTML 
= strHTML;        
    
//    DivCurrent.insertAdjacentHTML( "afterEnd", strHTML);  
        
        objImage.src
= m_iamgeMinus;
        
    }
    
else
    {
        
if (objContent.style.display=="none"
        {
            objContent.style.display
="";
            objImage.src
= m_iamgeMinus;
        }
        
else
        {
            objContent.style.display
="none"
            objImage.src
= m_iamgePlus;
        }
    }    
}

function StartGetReomteByMat(strMaterialNo,strMatVersion)
{
    
var sRet = "";
    
    
//if no version ,there is no info ,so return empty;
    if (strMatVersion == "")
        
return sRet;
        
    
var SoapBody = "<MaterialNo>"+ strMaterialNo + "</MaterialNo>" + "<MatVersion>"+ strMatVersion + "</MatVersion>"

    
var MethodName = "StartGetReomteByMat";
    sRet  
= RemoteRun(m_UrlRemote, MethodName, SoapBody);
    
    
return sRet;
}
// above is first root
/*
------------------------------------上面是树的操作----------------------------------------*/


/*------------------------------------下面是弹出窗口和查询的操作的操作----------------------------------------*/

var Argobj;
var m_urlPopupMat = '../CommonPage/PopupGetMaterial.aspx?MaterialNo=';


function GetMatNoAndDoQuery()
{
    getMatAndVerFromPopUpWin();
        
    DoSetFirstRoot(Argobj.MaterialNo,Argobj.MatVersion);    
    
}


function getMatAndVerFromPopUpWin()
{    
    Argobj 
= new Object();

    
var txtmaterialno = document.getElementById("txtMaterialNo");
    
var strMatNo = txtmaterialno.value;
    
    
var sDlgPath = m_urlPopupMat + strMatNo ;
    
var sFeatures = 'dialogHeight: 400px; dialogWidth: 320px;scroll:no;help:No;edge:sunken; center:yes; status: No;';

    window.showModalDialog(sDlgPath,Argobj,sFeatures);    
    
    
if (Argobj != null && Argobj.MaterialNo != null && Argobj.MaterialNo != "")
    {
        document.getElementById(
"txtMaterialNo").value =Argobj.MaterialNo;
        document.getElementById(
"txtVersion").value   =Argobj.MatVersion;
    }    
    
else
    {
        Argobj.MaterialNo 
= "";
        Argobj.MatVersion 
= "";
    }    
}

function DoSetFirstRoot(strMaterialNo,strMatVersion)
{
    
if (strMaterialNo == "")
    {
        
return;
    }
    
    
var txtproduct = document.getElementById("txtproduct");    
    
    
var contentPre = "<div style='CURSOR: hand'id='divMat"+ strMaterialNo +"' onmouseup=OnProductTurnIt();>";
    
var contentSuf = "</div><div id='divContent" + strMaterialNo + "'></div>";
    
var content = "<IMG id='" + m_ImgPre + strMaterialNo + "' width=" + m_ImageWith + " src='" + m_iamgeSpace + "'><A href='" + m_UrlMat + strMaterialNo   + "&BomVersion=" +  strMatVersion + "' target='" + m_ContentFormTag + "'>" + strMaterialNo + "</A>";
    
    
var strProductHtml = contentPre + content + contentSuf;
        
    txtproduct.innerHTML 
=  strProductHtml;    
    
    
//update bomConent
    //document.parentWindow.parent.frames.item(1).location.replace(m_UrlMat + strMaterialNo + "&BomVersion=" +  strMatVersion);

}

/*------------------------------------上面是弹出窗口和查询的操作的操作----------------------------------------*/



/*-----------------------------Begin-------敲回车的四种显示状态----------------Begin------------------------*/

//4status , hasMaterialNo(show) ,Has1Bom(show) ,HasManyBom(popup), NoMaterialNo(popup)

function MatKey13Down()
{
    
if(event.keyCode != 13)
    {        
        
return;
    }
    
    
var txtMaterialNo = event.srcElement;    
    
var strMaterialNo = txtMaterialNo.value;    
    
var strMatVersion = getDefaultMatVersion(strMaterialNo);    
    
    
var strRetValue = DoGetMatVersion(strMaterialNo);
    
if (strRetValue == "")
    {
        GetMatNoAndDoQuery();
        
return;
    }
    
    
var iverCounts = -1;
    
var iMatCounts = -1;
    
var strRets = strRetValue.split('|_|');
    
if (strRets.length > 1)
    {
        iMatCounts 
= strRets[0];
        iverCounts 
= strRets[1];
        strMatVersion 
= strRets[2];        
        
if (strMatVersion != '')
            document.getElementById(
"txtVersion").value = strMatVersion;
    }
    
    
// NoMaterialNo(popup)
    if (iMatCounts == 0 || iverCounts > 1)
    {
        GetMatNoAndDoQuery();
    }
    
else if (iverCounts == 1)
    {
        DoSetFirstRoot(strMaterialNo,strMatVersion);
    }
    
else if (iMatCounts == 1 && iverCounts == 0)
    {
        strMatVersion 
= document.getElementById("txtVersion").value;
        DoSetFirstRoot(strMaterialNo,strMatVersion);        
    }
}


//set Default MatVersion by script
function getDefaultMatVersion(strMaterialNo)
{
    
var strMatVersion = "";
    
var SoapBody = "<MaterialNo>"+ strMaterialNo + "</MaterialNo>";
    
    
var MethodName = "getDefaultVersion";
    strMatVersion 
= RemoteRun(m_UrlRemote, MethodName,SoapBody);
    
    document.getElementById(
"txtVersion").value = strMatVersion;
    
    
return strMatVersion;
}

function DoGetMatVersion(strMaterialNo)
{
    
var sRet = "";
    
if (strMaterialNo == "")
        
return sRet;
        
    
var SoapBody = "<MaterialNo>"+ strMaterialNo + "</MaterialNo>";

    
var MethodName = "getVersionByMat";
    sRet  
= RemoteRun(m_UrlRemote, MethodName, SoapBody);
    
    
return sRet;    
}


/*-----------------------------End-------敲回车的四种显示状态----------------End------------------------*/


/*----------------Begin-------右边 保存后的调用函数--------Begin--------------------*/
//other root use pkid as mark
//
e.g. :div + pkid   ; content + pkid ; img + pkid
function OnTurnItAuto(strPKID)
{
    
var DivCurrent = document.getElementById('divPKID' + strPKID);
    
var objContent = document.getElementById(m_ContentPre + strPKID);
    
var objImage   = document.getElementById(m_ImgPre + strPKID);
    

    
var result = StartGetReomte(strPKID);
    
//if No Detail  Return  NoData 
    var divObj = document.getElementById("divContent" + strPKID);
    
if (result == null || result == "" || result == "nodata" )
    {
        divObj.innerHTML 
= "";
        
return ;
    }
    
    
var strHTML = CombineHTML(result,strPKID);            
    
    
    divObj.innerHTML 
= strHTML;
    
    
    
//show
    //divObj.style.display="";
    //document.getElementById(m_ContentPre + strPKID).style.display="";
    
    
//DivCurrent.insertAdjacentHTML( "afterEnd", strHTML);  
    
    objImage.src
= m_iamgeMinus;

}


//first root
function OnProductTurnItAuto(strMaterialNo)
{
    
if (strMaterialNo == "")
        
return;

    
var DivCurrent = document.getElementById('divMat' + strMaterialNo);        
    
var strMatVersion = document.getElementById("txtVersion").value;
    
    
    
var objContent = document.getElementById(m_ContentPre + strMaterialNo);
    
var objImage = document.getElementById(m_ImgPre + strMaterialNo);

    
var result = StartGetReomteByMat(strMaterialNo,strMatVersion);
    
//if No Detail  Return  NoData 
    
    
var divObj = document.getElementById("divContent" + strMaterialNo);
    
if (result == null || result == "" || result == "nodata" )
    {
        divObj.innerHTML 
= "";
        
return ;
    }
    
/**/
    
    
var strHTML = CombineHTML(result,strMaterialNo);    
    
    
    
//show
    //divObj.style.display="";
    //document.getElementById(m_ContentPre + strMaterialNo).style.display="";
    
    divObj.innerHTML 
= strHTML;
            
//    DivCurrent.insertAdjacentHTML( "afterEnd", strHTML);  
    
    objImage.src
= m_iamgeMinus;

    
}


function FlushLeftByRightSave()
{
    
var strRetValue = document.getElementById("txtCurrenSaveValue").value;
    
    
var strRes = strRetValue.split('|_|');
    
    
if (strRes.length == 2)
    {
        
var strValue  = strRes[0];
        
var status  = strRes[1];
                
        
if (status == 1)  //1 express first root
        {
            OnProductTurnItAuto(strValue);
        }
        
else if (status == 2)  //2 exress >2 root
        {
            OnTurnItAuto(strValue);        
        }        
    }            
}

/*----------------End-------右边 保存后的调用函数--------End--------------------*/


2、WebService部分 BomServer.asmx


        
private int GetChildCount(string strMatNo,DataTable dtCount)
        
{
            
int iret = 0;
            
string strExp = string.Format(" FatherMat = '{0}' ",strMatNo);
            DataRow[] drs 
= dtCount.Select(strExp);

            
if (drs.Length > 0)
            
{
                iret 
= (int)drs[0]["ChildCount"] ;
            }


            
return iret;
        }


        [WebMethod]
        
public string StartGetReomteByMat(string MaterialNo,string MatVersion)
        
{
            
string strRet = "";

            
string strSQLPKIDMat = string.Format(" Select PKID,MaterialNo FROM TBL_BomDetail Where FatherMat = \'{0}\' And ProductNo = \'{0}\'  And BomVersion = {1} And IsDelete = 0  ",MaterialNo,MatVersion);
            
string strSQLHasChild = string.Format(" Select FatherMat,Count(*) As ChildCount FROM TBL_BomDetail Where FatherMat In ( Select MaterialNo FROM TBL_BomDetail Where FatherMat = \'{0}\' And ProductNo = \'{0}\'  And BomVersion = {1} And IsDelete = 0 ) And ProductNo = \'{0}\'  And BomVersion = {1} And IsDelete = 0 Group By FatherMat  ",MaterialNo,MatVersion);
            
string strSQL = string.Format(" {0} ; {1} ",strSQLPKIDMat,strSQLHasChild);

            DataSet ds 
=  DataProvider.RunSelect(strSQL);

            
if (ds==null || ds.Tables.Count <= 1 || ds.Tables[0].Rows.Count ==0)
            
{
            }

            
else
            
{
                
foreach(DataRow dr in ds.Tables[0].Rows)                               
                
{
                    
if (strRet.Trim() != "")
                    
{
                        strRet 
+= "|";
                    }

                    
string strPKID = dr["PKID"].ToString().Trim();
                    
string strMatNo = dr["MaterialNo"].ToString().Trim();

                    
int childCount = GetChildCount(strMatNo,ds.Tables[1]);

                    strRet    
+= string.Format("{0},{1},{2}",strPKID,strMatNo,childCount);
                }

            }


            
return strRet;
        }



        [WebMethod]
        
public string GetBomDetailByPKID(string strPKID)
        
{
            
string strRet = "";

            
string strConSQL = string.Format("  FatherMat In (Select MaterialNo FROM TBL_BomDetail  Where PKID =  {0}) And ProductNo In (Select ProductNo FROM TBL_BomDetail  Where PKID =  {0}) And  BomVersion In (Select BomVersion FROM TBL_BomDetail  Where PKID =  {0}) ",strPKID);
            
string strSQLPKIDMat = string.Format(" Select PKID,MaterialNo FROM TBL_BomDetail Where IsDelete = 0  And  {0} ",strConSQL);

            
string strHasChildCon = string.Format("  ProductNo In (Select ProductNo FROM TBL_BomDetail  Where PKID =  {0}) And  BomVersion In (Select BomVersion FROM TBL_BomDetail  Where PKID =  {0}) ",strPKID);
            
string strHasChildConFatherMat = string.Format(" FatherMat In ( Select MaterialNo FROM TBL_BomDetail Where IsDelete = 0 And {0} ) ",strConSQL);
            
string strSQLHasChild = string.Format("  Select FatherMat,Count(*) As ChildCount FROM TBL_BomDetail Where {0} And {1} And IsDelete = 0 Group By FatherMat  ",strHasChildConFatherMat,strHasChildCon);
            
string strSQL = string.Format(" {0} ; {1} ",strSQLPKIDMat,strSQLHasChild);

            DataSet ds 
=  DataProvider.RunSelect(strSQL);

            
if (ds==null || ds.Tables.Count==0 || ds.Tables[0].Rows.Count ==0)
            
{
            }

            
else
            
{
                
foreach(DataRow dr in ds.Tables[0].Rows)                               
                
{
                    
if (strRet.Trim() != "")
                    
{
                        strRet 
+= "|";
                    }

                    
string strDetialPKID = dr["PKID"].ToString().Trim();
                    
string strMatNo = dr["MaterialNo"].ToString().Trim();
                    
int childCount = GetChildCount(strMatNo,ds.Tables[1]);
                    strRet    
+= string.Format("{0},{1},{2}",strDetialPKID,strMatNo,childCount);
                }

            }


            
return strRet;
        }


        [WebMethod]
        
public string getVersionByMat(string MaterialNo)
        
{
            
string strRet = "";
            
string strSQLMat = string.Format(" Select PKID FROM TBL_StockMaterial Where MaterialNo = \'{0}\'  ",MaterialNo);
            
string strSQLBom = string.Format(" Select BomVersion FROM TBL_Bom Where MaterialNo = \'{0}\' And IsDelete = 0  ",MaterialNo);
            
string strSQL = string.Format("{0} ; {1}  ",strSQLMat,strSQLBom);


            DataSet ds 
=  DataProvider.RunSelect(strSQL);

            
if (ds==null || ds.Tables.Count <= 1 || ds.Tables[0].Rows.Count ==0)
            
{
            }

            
else
            
{
                
int iMatCount = ds.Tables[0].Rows.Count ;
                
int iVerCount = ds.Tables[1].Rows.Count ;
                
string strMatVersion  = "";
                
if (ds.Tables[1].Rows.Count > 0)
                    strMatVersion 
= ds.Tables[1].Rows[0]["BomVersion"].ToString();

                strRet    
= string.Format("{0}|_|{1}|_|{2}",iMatCount,iVerCount,strMatVersion);
            }

            
return strRet;
        }




        [WebMethod]
        
public int getDefaultVersion(string MaterialNo)
        
{
            
int retBomVersion = 0;
            
int intCurMaxVersion = 0;
            
string strSQL = string.Format(" Select Max(BomVersion) As MaxVersion FROM TBL_Bom Where MaterialNo = \'{0}\'  ",MaterialNo);
            DataSet ds 
=  DataProvider.RunSelect(strSQL);

            
if (ds==null || ds.Tables.Count <= 1 || ds.Tables[0].Rows.Count ==0)
            
{
            }

            
else
            
{
                    
if (!ds.Tables[0].Rows[0].IsNull("MaxVersion"))
                        intCurMaxVersion 
= (int)ds.Tables[1].Rows[0]["BomVersion"];
            }


            
string strYear = DateTime.Today.Year.ToString().Substring(2);
            
string strMonth = DateTime.Today.Month.ToString("00");
            
int iNewBomVer = Convert.ToInt32(strYear + strMonth + "00"); 

            
if (iNewBomVer > intCurMaxVersion)
            
{
                retBomVersion 
= iNewBomVer;
            }

            
else
                retBomVersion 
= intCurMaxVersion;


            
return retBomVersion + 1;
        }

        
    


 3、右边保存或删除的交互部分
(1)子件物料的保存和删除通过此函数

        private void RegisterFlushLeftTree()
        
{
            
string strValue = "";
            
if (H_ProductNo == H_FatherMat)
            
{
                strValue 
= string.Format("{0}|_|{1}",H_FatherMat,1);
            }

            
else
            
{
                
int ipPkid = getParentPKID();
                
if (ipPkid == 0)
                    
return;

                strValue 
= string.Format("{0}|_|{1}",ipPkid,2);
            }


            
string strScript = string.Format("<Script Language = javascript>OnFlushLeftTree('{0}');</Script>",strValue);
            Page.RegisterClientScriptBlock(Guid.NewGuid().ToString(),strScript);

        }


        
private int getParentPKID()
        
{
            
int iret = 0;
            
string strSQL = string.Format(" Select PKID From TBL_BomDetail Where  IsDelete = 0  And  MaterialNo = '{0}' AND  ProductNo = '{1}' And BomVersion = '{2}' And BomLevel = '{3}' ",H_FatherMat,H_ProductNo,H_BomVersion,M_BomLevel-1);
        
            DataSet ds 
= DataProvider.RunSelect(strSQL);

            
if (ds == null  || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
            
{
            }

            
else
            
{
                iret 
= (int)ds.Tables[0].Rows[0][0];
            }


            
return iret;        
        }

对应Javascript

(2)父件删除和保存的

对应Javascript