วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2551

เพิ่มแถวแรกให้กับ ComboBox เมื่อ Binding กับ Dataset

วันนี้กำลังนั่งทำ โปรแกรมอยู่ ก็ทำ ComboBox ให้ดึงข้อมูลมาจาก Dataset แต่ก็ประสบปัญหาคือ
ในการ Binding ข้อมูลมาใช้งานนั้น ตัว Dataset ก็จะทำการ แสดง Record แรกออกมาโชว์เลย
ซึ่งในบางครั้ง ข้อมูล ( Control นั้นๆ ) ยังไม่จำเป็นต้องมีข้อมูลในตอนนั้น ก็ไม่สามารถทำได้ เพระมันมีข้อมูลหมด
ด้วยความอ่อนชั้นเชิงในการเขียน ผมได้ไปปรึกษาคุณ KSM แห่งบอร์ด GF
ได้แนะนำโค้ด มาคือ
combobox1.selectedIndex= -1
ปรกติ รายการ ใน ComboBox จะ Index เริ่มต้นที่ 0 ( มันเป็น ArrayList )
แต่เมื่อลองใช้งานจริง ในกรณีที่ User กดเลือกรายการอื่นไปแล้ว แล้วกลับมาแก้ไข ตัวค่าว่างนั้นจะหายไป ( เพราะมันไม่มีอยู่จริง )
จากนั้นผมก็ไปหาข้อมูลใน GF อีกครั้ง จนไปติดใจเรื่องของการเคลียร์ค่า ComboBox ว่า เคลียร์ค่านั้น ไปเคลียร์ที่ DataTable
ก็เลยลองนั่งทำ ปรึกษา พี่เหมี่ยว ( MM ) ใน GF แก้ มั่ว ก็ได้โค้ดนี้มาครับ
dsCustomer.Tables("Customer").Rows.Add.Item("NameCust") = "--- Test ---"
ปรากฏว่า รายการเพิ่มครับ แต่ว่ามันไปเพิ่ม บรรทัด สุดท้าย (เพราะมัน ADD นั้นเอง )
เลยนำไปถาม ในบอร์ด GF อีกรอบ ก็ได้ อาจาร์ย สุเทพ แนะนำ ให้ลองดู InsertAt (แปลตรงตัวว่า แทรกที่ )
เลยได้เว็บอ้างอิงที่ http://www.dotnet247.com/247reference/msgs/15/78855.aspx
ในเรื่องของการใช้ InsertAt
เลยสำเร็จมาเป็นโค้ด Dim drow As DataRow drow = dsCustomer.Tables("Customer").NewRow() drow("NameCust") = " - - - โปรดเลือก - - - " dsCustomer.Tables("Customer").Rows.InsertAt(drow, 0)
comboBox1.selectedIndex = 0 '--- ใส่ตัวนี้ไปเพื่อที่ว่า ค่าแรกที่แสดงใน ComboBox จะไปชี้ที่ โปรดเลือก

ก็ปรากกฏข้อมูลอย่างที่ผมต้องการ โดย SeletedValue มันค่า Nothing เพราะผมไม่ได้ทำการใส่ค่าไปด้วย เป็นอย่างที่ผมต้องการ ใครติดปัญหาตรงนี้ลองเอาไปประยุกต์ใช้ดูนะครับ Many Thanks.

GF Board อาจารย์สุเทพ คุณ NINE พี่ เหมี่ยว ( MM ) คุณ กิต ( KSM )

ไม่มีความคิดเห็น: