문제

나는 내 프로젝트를 위해 물건을 지향하는 물건을 유지하기 위해 노력하고 있습니다. 현재, 나는 모든 앱 클래스를 프레젠테이션 레이어 역할을하는 Winforms 프로젝트에 공급하는 .dll을 사용하고 있습니다.

예를 들어, .dll은 정렬 가능한 비인딩리스트 (t)를 양식으로 코드로 반환합니다. SortableBindingList (t)는 출발합니다 여기. SortableBindingList (제품)를 가정 해 봅시다. .dll의 기능을 가정합니다 Services.Products.GetList() SortableBindingList (제품)를 반환하면 쉽게 수행 할 수 있습니다.

DataGridView1.DataSource = Services.Products.GetList()

이제 DataGridView는 내 제품 목록으로 올바르게 채워져 있습니다. 괜찮은. 그러나 datagridView에서 선택한 내 객체를 돌려주는 .SelectedItem 속성이 없습니다.

' 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!

그러나 Combobox 또는 Listbox는 실제로 제품 객체를 저장하고 반환합니다.

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

그러나 또 다른 ... Combobox와 Listbox에는 제품 객체의 모든 필드가 표시되지 않고 DisplayMember 속성의 값 만 표시됩니다.

VB.NET 2008에 내가 놓친 vb.net 2008에 좋은 컨트롤이 있습니까? 이는 실제로 전체 객체의 필드를 표시하고 사용자가 선택한 경우 해당 객체를 다시 반환 할 객체 지향 기능을 제공합니까? 왜 그렇지 않을지에 대한 손실에 있습니다.

도움이 되었습니까?

해결책

DatagridView를 찾고있는 것 같습니다 선택된 속성. 당신이 설명하는 것에 그것을 사용할 수 있어야합니다.

당신은 그것을 사용하여 databounditem을 얻은 다음 원래 클래스로 캐스팅합니다. 제품 객체 목록이 묶여 있다고 가정 해 봅시다. 다음과 같은 것을 사용할 것입니다.

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

전체 행이 선택된 경우 작동합니다. 그렇지 않으면 Null 참조 예외를 얻을 수 있습니다. 이 경우 다음을 통해 현재 선택된 셀의 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