[ASP.net+VB] การทำ Select All / Unselect All ใน GridView

หลังจากคราวที่แล้ว ได้ทำการสร้าง CheckBox ใน GridView เพื่อแสดงข้อมูลจากฐานข้อมูลแล้ว

[ASP.net+VB] สร้าง CheckBox ใน GridView

มาคราวนี้ ก็จะมาเพิ่มเติมลูกเล่นให้กับ GridView

โดยที่ Header ของ GridView นี้ จะให้สามารถ Select All และ Unselect All ได้

แบบนี้

aspnet-gridview-selectall-03

  1. เลือก Edit Header Template เพื่อไปสร้าง Event ให้กับ CheckBox ที่ Header ของ GridView
  2. aspnet-gridview-selectall-01

  3. เลือก Event CheckedChange ของ CheckBox ที่เป็น Header Template
  4. aspnet-gridview-selectall-02

  5. พิมพ์โค้ดตามนี้้
  6. 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

  7. ลองรันดู จะพบว่า ยังไม่สามารถทำได้
  8. aspnet-gridview-selectall-03-1

  9. แต่อย่าเพิ่งตกใจไป เนื่องจาก CheckBox นั้น AutoPostBack มันจะมีค่า Default เป็น False ซึ่งทำให้ เมื่อเราคลิกแล้ว โค้ดที่เขียนจะยังไม่ทำงาน ดังนั้นจึงต้องเปลี่ยน จาก False เป็น True ซะ เพื่อให้การคลิก CheckBox นั้น เกิดการ PostBack (ถ้างงว่า PostBack คืออะไร ให้อ่านที่นี่)
  10. aspnet-gridview-selectall-04


รายละเอียดเพิ่มเติม เกี่ยวกับโค้ดตัวอย่าง

เนื่องจากการสร้าง 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]

[ASP.net+VB] สร้าง CheckBox ใน GridView

วันนี้จะมาทำ CheckBox ให้อยู่ใน GridView แบบนี้

aspnet-gridview-20

  1. เตรียม Database ให้พร้อม (ในที่นี้ใช้ Nwind.mdb)
  2. aspnet-gridview-01

  3. เลือก control ที่ชื่อ GridView
  4. aspnet-gridview-02

  5. จะได้แบบนี้
  6. aspnet-gridview-03

  7. เลือก New data source
  8. aspnet-gridview-04

  9. เลือก ประเภทของฐานข้อมูล ในที่นี้ใช้ Access
  10. aspnet-gridview-05

  11. เลือกไฟล์ฐานข้อมูลที่ต้องการผูกติดกับ GridView
  12. aspnet-gridview-06

  13. จากนั้นกด Next
  14. aspnet-gridview-07

  15. เลือก Column, Table ที่ต้องการ
  16. aspnet-gridview-09

  17. ลอง Test Query ดู เพื่อความมั่นใจ
  18. aspnet-gridview-10

  19. เมื่อติดต่อกับฐานข้อมูลเรียบร้อยแล้ว ลองรันดูจะได้ผลลัพธ์แบบนี้
  20. aspnet-gridview-12

  21. เริ่มขั้นตอนการสร้าง CheckBox ด้านหน้า โดยการคลิก Edit column
  22. aspnet-gridview-13

  23. เลือก Add TemplateField
  24. aspnet-gridview-14

  25. เลือก Edit Template
  26. aspnet-gridview-11

  27. เลือก Item Template ของ Column[0]
  28. aspnet-gridview-15

  29. ลาก CheckBox มา ( Item Template เป็นส่วนที่แสดงข้อมูล)
  30. aspnet-gridview-16

  31. เลือก Header Template ของ Column[0]
  32. aspnet-gridview-17

  33. ลาก CheckBox มาใส่ (ส่วน Header คือส่วนหัวของตาราง GridView)
  34. aspnet-gridview-18

  35. เสร็จแล้วก็กด End Template Editing
  36. aspnet-gridview-19

  37. ลองรันดู จะได้ผลลัพธ์ ตามต้องการ คือมี CheckBox อยู่ด้านหน้าของแต่ละแถว

  38. aspnet-gridview-20

วิธีทำวันนี้ ต้องขอบคุณ พี่ดิวและพี่มิซซู (-/|\-) อิอิ

อ่านเพิ่มเติม (มีตัวอย่างเป็น c# อย่างละเอียดด้วย)  คลิก