ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 5617|ตอบกลับ: 1

[VB.NET] เรียนรู้และใช้งาน DisplayMember/ValueMember ใน ComboBox ให้ลึกซึ้ง

[คัดลอกลิงก์]

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5973


อารัมภบท: ธรรมชาติของ ComboBox จะอาศัยวิธีการ (Method) คือ ListIndex ใน VB6 (หรือ SelectedIndex ใน VB.Net) เป็นดัชนีบ่งชี้รายการแต่ละ Item ว่าอยู่ลำดับที่เท่าไหร่ ซึ่งค่านี้มันถูกจำกัดเอาไว้ให้แค่เรียงลำดับตัวเลขจาก 0, 1, 2, 3, 4, 5 ... N (เลขจำนวนเต็ม) หากนำไปใช้กับตารางข้อมูล (Table) ในการเก็บข้อมูลจริงค่า Primary Key (PK) มันไม่ได้ถูกจัดเรียงลำดับเอาไว้ อาจจะเกิดการกระโดดข้ามไป เพราะข้อมูลบางรายการมันอาจจะถูกลบทิ้งนั่นเอง ...

ตัวอย่าง:
Index = 0: Key = 1, Value = "Visual Basic"
Index = 1: Key = 2, Value = "C#"
Index = 2: Key = 3, Value = "JAVA"
Index = 3: Key = 5, Value = "C++"
Index = 4: Key = 8, Value = "Objective C"
Index = 5: Key = 9, Value = "Visual Basic .NET"

หากเป็นเมื่อก่อน เราจะต้องนำค่าจาก Item เช่น "C++" ไปทำการค้นหาข้อมูล เพื่อหาค่า PK ของ Item นี้ก่อน จึงจะสามารถนำไปบันทึกข้อมูลลงในตารางหลักได้ สำหรับ ComboBox Control ใน Visual Basic .Net ได้มีการพัฒนาเพิ่มเติมที่ดีขึ้นกว่าใน Visual Basic 6 (รุ่น Classic) คือในเรื่องคุณสมบัติ (Properties) ที่สำคัญ 2 อย่างด้วยกันคือ ...

- DisplayMember แสดงผลรายการ หรือ Item ที่ให้ผู้ใช้เลือกนั่นเอง
- ValueMember การซ่อนค่ารายการบางอย่าง ซึ่งค่านี้เรามักจะนำไปใช้ในเรื่องของ Primary Key ของตารางย่อยต่อไป

ด้วยหลักการนี้เองจึงเกิดความสะดวกสบายสำหรับเหล่าโปรแกรมเมอร์ได้ เพราะเราสามารถยัดข้อมูลเข้าสู่ ComboBox Control ได้ทั้ง Primary Key และ Item ในลักษณะ Array ทำให้เราไม่ต้องเสียเวลาไปค้นหาข้อมูลอย่างที่เกริ่นนำเอาไว้นั่นเอง ...

ตัวอย่างมุมมองแบบ Array เพื่อให้เข้าใจได้ง่าย เมื่อ ...
Key = ValueMember
Value = DisplayMember
Array(Key, Value)
Array(1, "Hello")
Array(10, "World")
Array(99, "VB.Net")


Design Time

ขอนำเสนอโค้ดตัวอย่าง (ก็ใช้งานได้จริงนั่นแหละ) มาให้คิดกันเพลินๆเจริญใจ 2 ชุดนะครับ ...
โค้ดการใช้งานแบบที่ 1
  1. Public Class Form1

  2.     Private _language As New List(Of Language)

  3.     Class Language
  4.         '// Consider the data type
  5.         Property key As Integer
  6.         Property value As String
  7.     End Class

  8.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  9.         _language.Add(New Language With {.key = 1, .value = "Visual Basic"})
  10.         _language.Add(New Language With {.key = 2, .value = "C#"})
  11.         _language.Add(New Language With {.key = 3, .value = "JAVA"})
  12.         _language.Add(New Language With {.key = 5, .value = "C++"})
  13.         _language.Add(New Language With {.key = 8, .value = "Objective C"})
  14.         _language.Add(New Language With {.key = 9, .value = "Visual Basic .NET"})

  15.         ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
  16.         ComboBox1.DataSource = _language
  17.         ComboBox1.DisplayMember = "value"
  18.         ComboBox1.ValueMember = "key"
  19.     End Sub

  20.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  21.         MessageBox.Show("ValueMember : " & CType(ComboBox1.SelectedItem, Language).key & vbCrLf & _
  22.                         "DisplayMember : " & CType(ComboBox1.SelectedItem, Language).value & vbCrLf & _
  23.                         "SelectedIndex is : " & ComboBox1.SelectedIndex)
  24.     End Sub
  25. End Class
คัดลอกไปที่คลิปบอร์ด

โค้ดการใช้งานแบบที่ 2
  1. Public Class Form1

  2.     Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         '// Consider the data type
  4.         Dim cbData As New Dictionary(Of Integer, String)()
  5.         cbData.Add(1, "Visual Basic")
  6.         cbData.Add(2, "C#")
  7.         cbData.Add(3, "JAVA")
  8.         cbData.Add(5, "C++")
  9.         cbData.Add(8, "Objective C")
  10.         cbData.Add(9, "Visual Basic .NET")

  11.         ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
  12.         ComboBox1.DataSource = New BindingSource(cbData, Nothing)
  13.         ComboBox1.ValueMember = "key"
  14.         ComboBox1.DisplayMember = "value"
  15.     End Sub

  16.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  17.         Dim key As String = DirectCast(ComboBox1.SelectedItem, KeyValuePair(Of Integer, String)).Key
  18.         Dim value As String = DirectCast(ComboBox1.SelectedItem, KeyValuePair(Of Integer, String)).Value
  19.         MessageBox.Show("ValueMember : " & key & vbCrLf & "DisplayMember : " & value & vbCrLf & _
  20.                                     "SelectedIndex is : " & ComboBox1.SelectedIndex)
  21.     End Sub
  22. End Class
คัดลอกไปที่คลิปบอร์ด

สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

58

โพสต์

10

เครดิต

Member

Rank: 2

เครดิต
10
โพสต์ 2022-10-25 17:51:23 | ดูโพสต์ทั้งหมด

ขอบคุณครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-3-29 16:24 , Processed in 0.271349 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้