كيفية الحصول على قيمة عدد صحيح من combobox باستخدام dataTable كمستعار البيانات الخاص به

StackOverflow https://stackoverflow.com/questions/3106335

سؤال

أنا أستخدم رمزًا مشابهًا لهذا لملء 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.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top