[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

    aspnet-gridview-selectall-01

2. เลือก Event CheckedChange ของ CheckBox ที่เป็น Header Template

    aspnet-gridview-selectall-02

3. พิมพ์โค้ดตามนี้้

    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

4. ลองรันดู จะพบว่า ยังไม่สามารถทำได้

    aspnet-gridview-selectall-03-1

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

    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]

Categories Category: ASP.net+VB Tags Tags: , , , ,

2 Comments

  1. varn says:

    รบกวนหน่อยค่ะ พอติ๊กไปแล้ว พอรันไป มันก้อเหมือนไม่ได้ติ๊กอ่ะค่ะ
    ใส่โค้ดตามนี้เลยอ่ะค่ะ

  2. MarzKiiz says:

    มันขึ้น error ตรงโค้ดนี้อ่าค่ะ gvTransfer.Rows(i) หมายความว่าไงหรอค่ะ

    แร้วจะแก้ไขยังงัย????

    ขอบคุณล่วงหน้าค่ะ

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>