كيفية الحصول على قيمة عدد صحيح من combobox باستخدام dataTable كمستعار البيانات الخاص به
-
29-09-2019 - |
سؤال
أنا أستخدم رمزًا مشابهًا لهذا لملء combobox مع عناصر من قاعدة بيانات. تعمل الشاشة بشكل جيد ، لكن عندما أحاول الحصول على combobox.SelectedValue
إنه يعيد DataRowView ، حيث أحتاج إلى عدد صحيح. من الواضح أن هذا هو لأنني لم ألقي القيمة إلى عدد صحيح ، ولكن الوظيفة ، CInt(cboPosition.SelectedValue)
هو رمي البث غير صالح. هل هناك أي طريقة يمكنني من خلالها أن أكون نوعًا صحيحًا؟
Dim cn As New SqlConnection(CreditDisputesLogConn)
Dim cmd As New SqlCommand("CustomersLookup", cn)
Dim da As New SqlDataAdapter(cmd)
cmd.CommandType = CommandType.StoredProcedure
Try
Dim dt As New DataTable
da.Fill(dt)
uxCustomerName.DataSource = dt
uxCustomerName.DisplayMember = "CustomerName"
uxCustomerName.ValueMember = "CustomerID"
uxCustomerName.SelectedIndex = -1
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cn.Close()
cn.Dispose()
End Try
المحلول
تحتاج إلى تحديد كلا الحقلين ID
و Text
في SQL الخاص بك.
إذا قمت بتحديد ID
, ، يمكنك استخدام MsgBox TypeName(cboPosition.SelectedValue)
لتحديد نوع القيمة المحددة. قد يساعدك هذا في تصحيح الأخطاء.
تحرير: إذا SelectedValue
إرجاع أ DataRowView
, ، يمكنك الوصول إلى ID
الحقل مثل هذا:
Dim myDataRowView As DataRowView = DirectCast(cboPosition.SelectedValue, DataRowView)
Dim myId as Integer = CInt(myDataRowView("CustomerID"))
لماذا SelectedValue
إرجاع DataRowView
على الرغم من الصحيح ValueMember
تم تعيينه ، ليس لدي أي فكرة ...
EDIT2: لقد وجدت السبب SelectedValue
يعيد الصف بأكمله بدلاً من فقط ValueMember
: أنت يجب ضبط الخصائص في الترتيب "الصحيح", ، بمعنى آخر:
uxCustomerName.DisplayMember = "CustomerName"
uxCustomerName.ValueMember = "CustomerID"
uxCustomerName.DataSource = dt
(أولاً DisplayMember
و ValueMember
, ومن بعد DataSource
.)