سؤال

لقد تم العمل على حفظ الأشياء وجوه المنحى أجل المشروع.حاليا, أنا باستخدام .DLL التي تمد كل من التطبيق دروس WinForms المشروع بوصفها طبقة العرض.

بلدي .DLL ، على سبيل المثال ، يعود SortableBindingList(T) إلى التعليمات البرمجية في نموذج.على SortableBindingList(T) يأتي من هنا.دعونا نفترض SortableBindingList(المنتج).على افتراض أن .DLL وظيفة Services.Products.GetList() ترجع SortableBindingList(المنتج), أنا يمكن بسهولة القيام بذلك:

DataGridView1.DataSource = Services.Products.GetList()

الآن DataGridView بشكل صحيح بالسكان مع قائمة المنتجات.بخيرومع ذلك ، لا يوجد .SelectedItem المنشأة والذي يعطي لي الكائن الذي تم تحديده في DataGridView:

' Doesn't exist!
Dim p As Product = DataGridView1.SelectedItem
' Need to make another DB call by getting the Product ID 
' from the proper Cell of the DataGridView ... yuck!

بيد أن عنصر تحكم تحرير وسرد أو مربع القائمة في الواقع مخزن إرجاع المنتج الكائنات سليمة:

' Valid!
ComboBox1.DataSource = Services.Products.GetList()
Dim p as Product = ComboBox1.SelectedItem

آخر ومع ذلك ...في ComboBox و ListBox لا تظهر جميع مجالات المنتجات كائن فقط قيمة DisplayMember الملكية.

هناك لطيفة التحكم في VB.NET 2008 أن أنا في عداد المفقودين ، الذي يعطيني وجوه المنحى الوظيفي الذي أريد وهو فعلا عرض كامل الكائن المجالات و أيضا عودة هذا الكائن عندما المحددة من قبل المستخدم ؟ أنا في حيرة لماذا لن يكون هناك.

هل كانت مفيدة؟

المحلول

يبدو أنك تبحث عن DataGridView هو SelectedRows الملكية.يجب أن تكون قادرا على استخدام هذا ما كنت تصف.

يمكنك استخدامه للحصول على DataBoundItem ثم يلقي ذلك إلى الطبقة الأصلية.دعونا نقول لدي قائمة من المنتجات وأجسام, وأود أن استخدام شيء من هذا القبيل:

Dim p As Product = CType(dataGridView1.SelectedRows(0).DataBoundItem, Product)
MessageBox.Show(p.Name & " " & p.Price)

يعمل هذا إذا كان الصف بأكمله يتم تحديد خلاف ذلك يمكنك الحصول على مرجع فارغة استثناء.في هذه الحالة يمكن أن تحصل على RowIndex حاليا الخلية المحددة عن طريق:

dataGridView1.SelectedCells(0).RowIndex

كل ذلك معا هذا تبدو الآن مثل:

If dataGridView1.SelectedCells.Count > 0 Then
    Dim index as Integer = dataGridView1.SelectedCells(0).RowIndex
    Dim p As Product = CType(dataGridView1.SelectedRows(index).DataBoundItem, Product)
    MessageBox.Show(p.Name & " " & p.Price)
End If

تحرير: تحديث VB.NET

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