[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# อย่างละเอียดด้วย)  คลิก

[ASP.net+VB] การสร้าง Pop-up Calendar

วันนี้จะทำ Pop Up Calendar แบบนี้

aspnet-popupcalendar-10

เมื่อคลิกที่ปุ่ม ก็จะโชว์ปฏิทิน แบบนี้

aspnet-popupcalendar-11

เตรียมพร้อมก่อนใช้งาน

  1. ก่อนอื่น ต้องดาวโหลด Control Set จากเว็บนี้  eworldui.net เมื่อดาวโหลดมาเสร็จแล้วก็ install โลดดดดดดด
  2. aspnet-popupcalendar-01

  3. เมื่อ install เสร็จแล้วก็เปิด Visual Studio ขึ้นมา มองไปที่ toolbox แล้ว คลิกขวา เลือก Add Tab เพื่อสร้าง Tab สำหรับเก็บ Control ของ eWorldUI (จะไม่ Add Tab ก็ได้นะ แต่ทำไว้เพื่อความสะดวกในการใช้งานในครั้งต่อๆ ไป)
  4. aspnet-popupcalendar-02

  5. พิมพ์ชื่อ Tab ว่า  eWorldUI

  6. aspnet-popupcalendar-03

  7. เลือก Tab eWorldUI แล้วคลิกขวา Choose Items
  8. aspnet-popupcalendar-04

  9. เลือก Items ที่มี Namespac ว่า eWorld.UI ทั้งหมด (คลิก Namespace ก็ได้เพื่อให้เรียงตามตัวอักษร) จากนั้นกด OK

  10. aspnet-popupcalendar-05

  11. จะเห็นว่าที่ Toolbox ของเราจะมีเพิ่มขึ้นมามากมาย (แต่ในที่นี้จะแนะนำแค่ CalendarPopup อย่างเดียว อิอิ)

  12. aspnet-popupcalendar-06

  13. ต่อมา ไปที่ Solution Explorer คลิกขวาที่ชื่อ Project จากนั้นเลือก Add Reference

  14. aspnet-popupcalendar-07

  15. เลือก Excentrics World Controls

  16. aspnet-popupcalendar-08

  17. แค่นี้ก็พร้อมใช้งานแล้ว


ใช้งาน CalendarPopup (Design)

  1. ลาก CalendarPopup มาจาก Toolbox จะได้ดังนี้
  2. aspnet-popupcalendar-09

  3. ลอง Run ดูจะได้แบบนี้
  4. aspnet-popupcalendar-10

  5. ลองคลิกที่ปุ่ม … จะได้แบบนี้
  6. aspnet-popupcalendar-11

  7. โอ้ววว เสร็จแล้ว pop up calendar ที่ต้องการ

(ไม่ต้องเขียนเองให้เมื่อยตุ้ม…)


ใช้งาน CalendarPopup (Coding)

หลังจากมี Design ของ CalendarPopup แล้ว ต่อมาเราก็จะมาเขียนโค้ดเพื่อนำไปใช้งาน


เป้าหมายคือ เมื่อเลือกวันที่เสร็จแล้ว กด OK ให้โชว์วันที่ที่เลือกไว้ (ง่ายๆ ก่อน)

  1. หน้า Design เพิ่มเติมนิดหน่อยแบบนี้
  2. aspnet-popupcalendar-12

  3. Double Click ที่ปุ่ม OK เพื่อเขียนโค้ด
  4. Dim myDate As Date
    myDate = CalendarPopup1.SelectedDate
    lblDate.Text = myDate.ToString()

  5. ลอง Run ดู จะได้แบบนี้
  6. aspnet-popupcalendar-13

ไม่เพียงแค่โชว์ Date ได้เท่านั้น ลอง CalendarPopup1.SelectedDate แล้วจุด ดูจะขึ้น Property มา สามารถเลือกได้ทั้ง Day, Month, Year, DayOfWeak เป็นต้น

ลองเล่นดูเพิ่มเติม และแล้ววันนี้ก็สร้าง Pop Up Calendar ได้ตามความต้องการ

ต้องขอบคุณพี่ดิว สำหรับคำแนะนำ ^^”

[ASP.net+VB] VBCrlf

vbcrlf ย่อมากจาก “Carriage return, Line feed”

(vb = visual basic)

หมายความว่า แถวว่างเปล่าที่ต่อท้ายทุกๆ string พูดง่ายๆ ก็คือ

เป็นตัวเก็บว่า string นั้นได้ขึ้นบรรทัดใหม่แล้ว

เป็น Function การตัด string

ตัวอย่างเช่น

มี textbox ที่เป็น multiline (หรือ textarea ใน html) ก็เป็นช่องสำหรับใส่ Description (txtDescription)
และก็มีส่วนที่แสดง Description ที่เป็น label ธรรมดา (lblDescription)
ต้องการให้ lblDescription แสดงการขึ้นบันทัดใหม่เหมือนตอนใส่ใน txtDescription

1. สร้าง Design Page ดังนี้ (Propeties ของ Textbox) อย่าลืมปรับ
textmode เป็น multiline    aspnet-vbcrlf-01-1

aspnet-vbcrlf-01

2. เมื่อของ Build ดู ก็จะได้แบบนี้

aspnet-vbcrlf-02

3. ลองใส่โค้ด แบบธรรมดา ตามนี้

lblDescription.Text = txtDescription.Text

4. จะได้ผลลัพธ์แบบนี้ (อยู่บรรทัดเดียวกัน)

aspnet-vbcrlf-03

5. ลองเปลี่ยนโค้ดเป็นแบบนี้ดู

lblDescription.Text = Replace(txtDescription.Text, vbCrLf, "<br>")

6. ว๊าว… ได้ผลลัพธ์อย่างที่ต้องการแล้ว (อยู่คนละบรรทัด)

aspnet-vbcrlf-04

ง่ายนิดเดียว~

 

Function การตัด String

ตัวอย่าง

Dim ReplaceTxt as String
ReplaceTxt = "บรรทัดแรก
บรรทัดสอง
บรรทัดสาม"
replace(ReplaceTxt,vbcrlf,"")

ก็จะได้ค่า คือ “บรรทัดแรกบรรทัดสองบรรทัดสาม”