不用第归算法快速显示树,对于Oracle数据库(2)

namespace BQ_TreeView

{

///

1<summary>
2
3///  BQ_TreeView  的摘要说明 
4
5///  </summary>

public class BQ_TreeView : System.Windows.Forms.TreeView

{

private System.ComponentModel.Container components = null ;

private DataTable m_tb= null ;

private string m_RootMatID;

BQ_TreeNode RootNode= null ;

ArrayList alNode= new ArrayList ();

public BQ_TreeView()

{

InitializeComponent();

}

protected override void Dispose( bool disposing )

{

if ( disposing )

{

if (components != null )

{

components.Dispose();

}

}

base .Dispose( disposing );

}

#region

private void InitializeComponent()

{

components = new System.ComponentModel.Container();

}

#endregion

///

1<summary>
2
3///  定义数据源 
4
5///  </summary>

public DataTable TreeDataSource

{

set

{

m_tb= value ;

}

}

///

1<summary>
2
3///  清空所有树控件中的信息 
4
5///  </summary>

private void clear()

{

if (RootNode!= null )

{

RootNode.Nodes .Clear ();

if (RootNode!= null )

{

try

{

RootNode.Remove ();

}

catch

{}

}

}

if (alNode!= null )

if (alNode.Count >0)

alNode.Clear ();

}

///

1<summary>
2
3///  构造树控件 
4
5///  </summary>

public void MakeTree()

{

clear();// 清除树节点中的资源

Cursor.Current =Cursors.WaitCursor ;

// 首先要给根节点付值,因为取出来的结构中没有根节点的信息

RootNode= new BQ_TreeNode(m_RootMatID);

RootNode.MatID =m_RootMatID;

alNode.Add(RootNode);

this .Nodes .Add (RootNode);

foreach (DataRow row in m_tb.Rows )

{

BQ_TreeNode FNode= null ;

BQ_TreeNode CNode= null ;

CNode=MakeArray(row["ID"].ToString (),row[" 物料编码 "].ToString (), out FNode);

FNode.Nodes.Add (CNode);

}

RootNode.Expand ();

Cursor.Current =Cursors.Default ;

}

//

1<summary>
2
3///  构造一个动态数组,模拟树控件一个分叉的线性结构,每一次都是最新的线性结构,这整个控件关键地方 
4
5/// </summary>

///

1<param name="strID"/>

层次

///

1<param name="MatID"/>

物料编码

///

1<param name="nodeF"/>

父节点

///

1<returns> 构造的节点  </returns>

private BQ_TreeNode MakeArray( string strID, string MatID, out BQ_TreeNode nodeF) {

try

{

BQ_TreeNode node= new BQ_TreeNode (MatID);

node.MatID =MatID;

BQ_TreeNode nodeRet= null ;

int nGrade= int .Parse (strID);

if (nGrade==0)

{

}

else

{

if (alNode.Count>=nGrade+1)

{

alNode[nGrade]=node;

nodeRet=(BQ_TreeNode)alNode[nGrade-1];

}

else

{

alNode.Add (node);

nodeRet=(BQ_TreeNode)alNode[nGrade-1];

}

}

nodeF=nodeRet;

return node;

}

catch (Exception e)

{

throw new Exception("",e);

}

}

public string RootMatID

{

get

{

return m_RootMatID;

}

set

{

m_RootMatID= value ;

}

}

}

}

经过编译

Published At
Categories with Web编程
Tagged with
comments powered by Disqus