พึ่งเคยใช้งานครั้งแรกโปรดอ่านที่นี่! howtouse!
x
  • Register
หางานด้าน IT อยู่เหรอ?

ขอปรึกษาหน่อยครับ เรื่องการทำ Tree node ใน WindowForm C# Visual Studio 2010 ครับ

0 votes

คือผมจะทำการ วนลูปข้อมูลจากฐานข้อมูล เข้ามาใส่ในรูปแบบ tree อ่าครับ 
แต่ไม่รู้ว่า จะเรียงลำดับเงื่อนไข การตรวจเช็คยังไง ให้มันอยู่ใน node และ child node ครับ

รูปแบบ DataBase เป็นลักษณะนี้ครับ ส่วน root หลัก ก็คือ OUR COMPANY ครับ

ยกตัวอย่างน่ะครับ A เป็น child node ของ OUR COMPANY ครับ และ AA เป็น child node ของ A ไล่ลำดับแบบนี้อ่าครับ

แต่พอเมื่อถึง B ที่ record ที่ 6 อ่าคับ B มันมี SUPLOCATID เป็น 1 แสดงว่าให้ B เป็น child nod ของ OUR COMPANY แบบนี้อ่าครับ

ขอบคุณครับ

 

ถามเมื่อ Oct 25, 2013 in C# โดย Farkham Break-love (242 คะแนน)
   

2 Answers

0 votes
จะโกรธมั้ยถ้าให้แก้ schema เพิ่มอ่าครับ มันควรจะมี field ที่ระบุว่า record นี้มี parent เป็นอะไร จะสะดวกกว่ามากนะครับ
ตอบเมื่อ Oct 25, 2013 โดย Chayapol Limanon (510 คะแนน)
SUPLOCATID เป็น key parent ของแต่ล่ะ node นี่ครับ

เช่น record ที่ 2 มี record ที่ 3 เป็น parent ซึ่งคือ SUPLOCATID ไงครับ

หรือผมเข้าใจอะไรผิดหรือเปล่าครับ
อ่อ งั้น schema มันโอเคแล้วครับ ผมงงคำว่า "SUP" เอง >< sub ที่แปลว่าแยกย่อยใช้ตัว b ไม่ใช่ p นะครับ :)

โดยปกติแล้วผมจะเพิ่ม temp node เข้าไปที่ root node เพื่อให้มัน expand ได้ทุก node และจะเพิ่ม child node ตอน expand เท่านั้นเพื่อป้องกัน ui ค้างถ้ามี node เยอะๆ ครับ เสร็จแล้วถึงลบ temp node ทิ้ง
0 votes

เคยทำเมื่อนานมาแล้วครับ ลองดูนะ

คอนเซ็ปคร่าวๆ คือ ดึง root ออกมาก่อน แล้วค่อยวนลูปใส่ node ให้มันลงไปเรื่อยๆ

จะลงไปเรื่อยๆ ได้ต้องใช้เทคนิค recursive เพิ่มหา node มาใส่ให้ parent จนครบทั้งหมด

 

ประมาณนี้ครับ

 


Step1: สร้าง DataSet dasRoot แล้วเราเริ่มจากดึงข้อมูลออกมาเฉพาะ Root ก่อนเลย

ตย. SQL ประมาณ "SELECT * FROM xxx WHERE SUPLOCATIONID = 0

(ปกติ SUPLOCATIOID จะเป็น NULL นะ เพราะมัน FK กับตัวมันเอง)

 


Step 2: สร้าง Method สำหรับการ Recursive ผมทำไว้บน pastebin นะ ใส่คอมเม้นไว้ให้แล้ว

โดย method นี้ชื่อว่า FillChild(TreeNode parent, int childID)

http://pastebin.com/ymtV6ffa

 


 

ทีนี้มาดู การทำงาน

 

DataSet dasRoot = ไปดึงมาจาก Step 1 นะ

// เคลียร์ TreeView (Control) ออกให้หมดก่อนสร้างใหม่

TreeView.Nodes.Clear();

 

//เริ่มวนลูปจาก Root นั่นแหละ

foreach(DataRow row in dasRoot.Table[0].Rows)

{

//เก็บ LocationID เอาไว้หา Child

int locationID = Convert.ToInt32(row["LocationID"]);

 

//สร้าง TreeNode Root ผมใส่แต่ Text ให้นะ ถ้าจะใส่ Value ด้วยก็ใส่ลงไปจาก LocationID นั่นแหละ

TreeNode treeParent = new TreeNode();

treeParent.Text = row["LocationName"].ToString();

treeParent.Expand();

 

//ใส่ Root Node ลงไปใน Control TreeView

TreeView.Node.Add(treeParent);

 

//ต่อไปคือการหา Child ทั้งหมดที่เกี่ยวข้อง โดย Recursive

//เรียก Method นั้นเลย โดยเอา Node ที่จะหา Child มาใส่ และ เอา LocationID ลงไปด้วย เพื่อเอาไป WHERE SUPLOCATIONID = @childID

FillChild(treeParent, locationID);


}

 

จบและครับ คอนเซ็ป กับ โค้ด คราวๆ ประมาณน้ครับ รูปแบบ Syntax อาจจะมีผิดไปบ้าง ก็ลองดูนะรับ

 
ตอบเมื่อ Oct 26, 2013 โดย phanithanj (1,139 คะแนน)
edited Oct 26, 2013 โดย phanithanj

Related questions

0 votes
0 คำตอบ
0 votes
1 คำตอบ
447 views ถามเมื่อ Oct 23, 2013 in C# โดย ZaraKiKenpachi (102 คะแนน)
0 votes
1 คำตอบ
217 views ถามเมื่อ Mar 2, 2013 in C# โดย Ying Thapanee (112 คะแนน)
0 votes
0 คำตอบ
263 views ถามเมื่อ Dec 9, 2015 in C# โดย Jidrid (102 คะแนน)
...