我是菜鳥。ASP.NET
目的:輸入料號以TreeView展現其BOM
這是鼎新 workflow erp的Bom表
MD001是主件料號,MD003是子件料號
我的做法是先產生某一主件相關父子件的DataTable,
再利用此DataTable去構建TreeView:
在getBOM輸入主件料號:例如10100116544,
就產生下面的DataTable (沒Level那欄也沒差,只是展示用)
public DataTable getTable(string PN) { |
DataTable dt = new DataTable("BOM"); //先把DataTable的結構建好 |
dt.Columns.Add("father", typeof(string)); //新增三個欄位 |
dt.Columns.Add("Son", typeof(string)); |
dt.Columns.Add("Level",typeof(int)); |
bomTable (PN, ref dt, -1); //呼叫傳回DataTable的 Method |
return dt; } |
private void bomTable(string PN, ref DataTable dt,int level) { |
++level; //怕無窮迴圈,所以限定10,沒有也沒差 |
if (level <=10) { |
string sql = "select RTRIM(MD003) from BOMMD where MD001=@PN"; |
DataRow dr; |
using (SqlConnection cn = new SqlConnection(wwconnectionString)) { |
SqlCommand cmd = new SqlCommand(sql, cn); |
cmd.Parameters.Add("@PN", SqlDbType.NChar).Value = PN; |
if (cn.State != ConnectionState.Open) |
cn.Open(); |
SqlDataReader reader = cmd.ExecuteReader(); |
cmd.Dispose(); |
if (reader.HasRows){ //假如有row |
while (reader.Read()) { |
dr = dt.NewRow(); |
dr[0] = PN; |
dr[1] = reader.GetString(0); |
dr[2] =level; |
dt.Rows.Add(dr); |
bomTable (reader.GetString(0), ref dt,level); //作遞迴 |
}reader.Close();}}}} |
得到DataTable後,就開始建Tree,網頁上已有一個TreeView2,
作法是先把此 Tree的所以有Node先建立好,在加入TreeView裡。
TreeNode newNode = new TreeNode(); // 建立Root Node |
newNode.Value = “10100116544”; |
newNode.Text = “10100116544”; |
DataTable dt = proxy.getTable(“10100116544”) |
if (dt != null) //假如有主件的相關主附件列表,就進入buildTree建立子Node |
TreeView2.Nodes.Add( bulidTree(newNode)); |
else TreeView2.Nodes.Add(newNode); //沒有也是要建root Node |
private TreeNode bulidtree(TreeNode node) { |
string expression; //加入篩選條件,找出父件是xx的所有子件 |
expression = "father='" + node.Value+"'"; |
if (dt.Select(expression) != null) { |
foreach (DataRow dr in dt.Select(expression)) |
{ TreeNode sunNode = new TreeNode(); |
sunNode.Text = dr[1].ToString(); 子結點顯示的文字 |
sunNode.Value = dr[1].ToString(); |
node.ChildNodes.Add(sunNode); 把子件的結點加入父件的子結點 |
bulidtree(sunNode); } //遞迴 |
} |
return node ; } |
有更好的方式歡迎指教,下面是GrideView及TreeView的結合。
No comments:
Post a Comment