หลังจากคราวที่แล้ว ได้ทำการสร้าง CheckBox ใน GridView เพื่อแสดงข้อมูลจากฐานข้อมูลแล้ว
[ASP.net+VB] สร้าง CheckBox ใน GridView
มาคราวนี้ ก็จะมาเพิ่มเติมลูกเล่นให้กับ GridView
โดยที่ Header ของ GridView นี้ จะให้สามารถ Select All และ Unselect All ได้
แบบนี้

- เลือก Edit Header Template เพื่อไปสร้าง Event ให้กับ CheckBox ที่ Header ของ GridView
- เลือก Event CheckedChange ของ CheckBox ที่เป็น Header Template
- พิมพ์โค้ดตามนี้้
- ลองรันดู จะพบว่า ยังไม่สามารถทำได้
- แต่อย่าเพิ่งตกใจไป เนื่องจาก CheckBox นั้น AutoPostBack มันจะมีค่า Default เป็น False ซึ่งทำให้ เมื่อเราคลิกแล้ว โค้ดที่เขียนจะยังไม่ทำงาน ดังนั้นจึงต้องเปลี่ยน จาก False เป็น True ซะ เพื่อให้การคลิก CheckBox นั้น เกิดการ PostBack (ถ้างงว่า PostBack คืออะไร ให้อ่านที่นี่)


If CType(GridView1.HeaderRow.FindControl("chkHeader"), CheckBox).Checked Then
Dim i As Integer
For i = 0 To GridView1.Rows.Count - 1
Dim gvRow As GridViewRow = gvTransfer.Rows(i)
CType(gvRow.FindControl("chkItem"), CheckBox).Checked = True
Next
Else
Dim i As Integer
For i = 0 To GridView1.Rows.Count - 1
Dim gvRow As GridViewRow = GridView1.Rows(i)
CType(gvRow.FindControl("chkItem"), CheckBox).Checked = False
Next
End If


รายละเอียดเพิ่มเติม เกี่ยวกับโค้ดตัวอย่าง
เนื่องจากการสร้าง CheckBox ในครั้งนี้เป็นการสร้างใน GridView ดังนั้นจึงไม่สามารถเรียกใช้งานได้โดยตรง
จึงต้องเรียกผ่านทางฟังก์ชัน FindControl
ซึ่งเริ่มต้น เราต้องหา CheckBox ตัวที่เป็น Header ก่อน โดยใช้คำสั่งว่า
ชื่อGridView.HeaderRow.FindControl[ชื่อ ID ของ control ที่ต้องการค้นหา]
ถ้าพิมพ์แค่นี้จะเป็นแค่ expression ต้องทำการ Convert เป็นประเภทเดียวกับ Control ที่เราหา โดยใช้ฟังก์ชัน CType
เช่น CType(GridView1.HeaderRow.FindControl(“chkHeader”), CheckBox)
สำหรับ CheckBox ที่เป็น Item Template นั้น ใช้คำสั่งว่า
ชื่อGridView.Row(i).FindControl[ชื่อIDของcontrol]

Write a Comment