ในบางครั้งการใช้ข้อมูลจาก Webservice ซึ่งคืนค่าเป็น DataSet ผู้พัฒนาโปรแกรม อาจจำเป็นต้องทำการ Seach Sort Filter ตลอดจน การ Distinct ข้อมูล เพื่อนำข้อมูลมาใช้งานต่อ ทั้งนี้ในอดีต เราอาจใช้วิธี วน Loop แต่วันนี้ เราจะเขียนโปรแกรมได้ง่ายขึ้น โดยจะยกตัวอย่างให้สามารถนำไปปรับใช้ได้ง่ายๆ นะคะ (ในที่นี้เป็น C#.net ภาษาอื่นก็นำไปปรับใช้นะคะ)
1. การ Search
//กรณีต้องการ Search ฟิวด์ codeid
DataRow[] returnedRows;
returnedRows = ds.Tables[0].Select("codeid='" + id + "'");
string name = returnRows[0][1].ToString();
2. การ Sort/Filter/Distinct Value (ที่มี uniqueID ด้วย)
DataSet ds = ดาต้าเซทที่จะใช้;
ds.Tables[0].Columns.Add("displayname", typeof(string), "[facultyname]+'==>'+[programcodename]"); //การเพิ่มคอลัมท์จากการ เชื่อม 2 ฟิลด์สำหรับการแสดงผล
DataView dataview = new DataView(ds.Tables[0]);
dataview.RowFilter = "displayname NOT LIKE '%ซ้ำ%'"; //ฟิวเตอร์ ไม่เอาข้อความที่มีคำว่า ซ้ำ จะใช้ LIKE หรือ เครื่องหมายทางคณิตศาสตร์ก็ได้
dataview.Sort = "displayname DESC"; //การเรียงลำดับข้อมูลจากมากไปหาน้อย กรณีจากน้อยไปหามาก ใช้ ASC
DataTable datatable = dataview.ToTable(); //นำข้อมูลที่ได้จากการประมวลผล dataview ใส่กลับคืนให้กับ datatable
//ต่อไปนี้เป็นการ เอาค่า ID ล่าสุด แยกตาก Group by ที่ต้องการ ในที่นี้จะ group ด้วย displayname ที่สร้างใหม่จากคำสั่งข้างบน แล้วนำไปสร้างเป็น table g ที่มีการ select ข้อมูล จาก Max ID ซึ่งก็คือ programid และ NAME ในที่นี้จะแทนค่าใน displayname
var results = from p in datatable.AsEnumerable()
group p by p["displayname"]
into g
select new
{
ID = g.Max(u => u["programid"]),
NAME = g.Key
};
ddl.DataSource = results; // นำผลการประมวลผลเป็น DataSource ของ DropDownList
ddl.DataTextField = "NAME";
ddl.DataValueField = "ID";
ddl.DataBind();
ddl.Items.Insert(0, new ListItem(""));
//หรือกรณีเป็น GridView ก็สามารถทำได้โดย
gv.DataSource = results.ToList();
gv.DataBind();