ในช่วงที่ผ่านมา ได้มีการพัฒนาระบบโดยมีการนำ LinQ มาใช้นิด ๆ หน่อย ๆ (มือใหม่หัดใช้ >< ) ซึ่งมีอยู่ฟังก์ชันนึงที่เกี่ยวกับ การ Bind ค่า DropdownList กรณีที่มี DropdownList หลาย ๆ ตัวและไม่อยากให้ค่าที่เคยเลือกจาก DropdownList ก่อนหน้าไปแสดงใน DropdownList ถัดไปอีก น่าสนใจทดลองใช้แล้วทำงานได้ดี ผู้เขียนจึงนำมาเขียนเพื่อไว้เตือนความจำ จะได้กลับมาอ่าน แนวคิดและวิธีการดังนี้ค่ะ
ในขั้นตอนแรก สร้าง Data ที่ชื่อว่า MyList เก็บข้อมูล id และชื่อ เพื่อเตรียมเป็น DataSource สำหรับ Bind ให้กับ DropdownList1 ดังนี้
class MyList
{
private string id = string.empty;
private string name = string.empty;
public MyList(string _id, string _name)
{
id = _id;
name = _name;
}
public string ID
{
get{return id;}
set {id = value;}
}
public string Name
{
get{return name;}
set {name = value;}
}
}
ต่อมากำหนดค่าให้กับ MyList เพื่อผูกให้กับ DropdownList1
List<MyList> mylist = new List<MyList>{
new MyList(1,'name1'),
new MyList(2,'name2'),
new MyList(3,'name3'),
new MyList(5,'name5'),
new MyList(10,'name10')
};
ผลลัพธ์ของ DropdownList1 ได้ดังนี้
ID Name
1 name1
2 name2
3 name3
5 name5
10 name10
ต่อมา กำหนดว่า DropdownList1 เลือกค่าเป็น ID = ‘2’
string mySelectedValue = '2';
จากนั้น ที่ Event SelectedIndexChange ของ DropdownList1 ให้ใส่ Code ดังนี้
var myDataSource = from d in MyList
where !mySelectedValue.Contains(d.ID)
select d;
จากนั้นผูก myDataSource ให้กับ DropdownList2 ค่าล่าสุดใน DropdownList2 จะแสดงดังด้านล่าง โดยที่ ID = ‘2’ จะหายไป เนื่องจากถูกเลือกไปแล้ว ดังนี้
ID Name 1 name1 3 name3 5 name5 10 name10
กรณีที่มี DropdownList3 ก็ให้ทำเหมือนขั้นตอนก่อนหน้า ตัวอย่างกำหนดค่าการเลือกของ DropdownList1 = ‘2’ และ DropdownList2 = ‘5’ ดังนี้
string mySelectedValue = '2,5';
จากนั้น ที่ Event SelectedIndexChange ของ DropdownList2 ให้ใส่ Code แบบเดิม
var myDataSource = from d in MyList
where !mySelectedValue.Contains(d.ID)
select d;
จากนั้นผูก myDataSource ให้กับ DropdownList3 ค่าล่าสุดใน DropdownList3 จะแสดงดังด้านล่าง โดยที่ ID = ‘2’ และ ‘5’ จะหายไป เนื่องจากถูกเลือกไปแล้ว ดังนี้
ID Name 1 name1 3 name3 10 name10
จะเห็นได้ว่าเราใช้ Query เดียวกันในหลาย ๆ DropdownList ดังนั้นสามารถทำ Query นี้ให้เป็นฟังก์ชันเพื่อเรียกใช้งานได้
หวังว่าจะเป็นประโยชน์ไม่มากก็น้อยสำหรับผู้อ่านนะคะ \(@^0^@)/