2012-01-18 1 views
1

DeckID, Name, UserID, Size 및 Notes 필드가있는 BindingList<T>의 사용자 지정 비즈니스 개체에 바인딩 된 DataGridView이 있습니다.외래 키가있는 DataGridView BindingDataSource

이것은 IDataReader 개체를 통해 MSSQL 데이터베이스에서 호출되었습니다. 자, 내 문제는 사용자 ID가 내 데이터베이스에서 Username 필드와 함께 SystemUser라는 테이블에 대한 외래 키인 정수입니다.
내가 원하는 것은 내 데이터베이스의 SystemUser 테이블에서 Username을 가져 와서 UserID를 기반으로 해당 이름을 표시하는 것입니다. 이것은 GridView을 사용하여 WebForms에서 매우 쉬웠지만 WindowsForms 앱에서는 그리 많지 않았습니다.

+0

플랫폼 태그 (silverlight, asp.net, winforms 등)를 추가해야합니다. –

+0

해당 테이블을 조인 할 때 사용자 정의 쿼리를 작성할 수 있습니다. – pistipanko

+0

사실, 그렇지만 SQL, 그리고 해당 클래스의 데이터 공급자 및 컨트롤러에서 특정 쿼리를 보관할 새 클래스를 만들어야합니다. Web Forms에서이 작업을 수행 할 수 있다는 것을 알고 있으므로 Windows Forms에서 수행 할 수 있어야합니다. 내 마음 속에서 이것은 꽤 일반적인 것이어야합니다 ... – Jack

답변

0

나는 당신이 찾고있는 것을 보았다고 생각합니다. DataGridView 인스턴스에서 onSelectionChange와 같은 이벤트를 사용하여 선택한 항목을 가져옵니다. 다음 사용 :

var selectedItem = datagridviewinstance.SelectedRows[x].DataBoundItem as YourTypeHere 
var data = (from a in SOMETHING where fk == selectedItem.ForeignKeyProperty select a); 
textbox1.Text = data.text; 

이제 다음 데이터베이스 호출을 만들어 외래 키 개체를 검색하고 원하는 GUI 개체를 업데이트 할 수 있습니다. 행운을 빕니다!

+0

죄송 합니다만 C#으로 작업 한 적이 있습니다 ... 저는 VB.NET을 전혀 모릅니다. 두 번째 줄의 내용을 이해하지 못합니다. ...하지만 GridView에서 데이터 바인딩 된 객체를 얻는 방법을 알고 있습니다. DataGridView에서 외부 테이블의 데이터를 자동으로 선택하는 방법을 이해하지 못합니다. – Jack

+0

처음 데이터를 검색하기 위해 DTO를 변경하지 않으려면 두 번째 데이터베이스 호출을 만들어야합니다. "선택 변경"에 이벤트를 넣으십시오. 외래 키를 사용하여 데이터베이스 호출을 설정하십시오. 선택을 변경하면 DataGrid가 외래 키 데이터를 "자동으로 선택"합니다. – user959729

+0

MSDN의 일부 게시물을 작성한 후 미안합니다. StackOverflow의 기사로 다시 연결됩니다. 솔루션은 다음과 같습니다. http://stackoverflow.com/questions/3758757/c-sharp-datagridviewcomboboxcolumn-binding-problem – Jack