DataGridView BindingDataSource с внешним ключом

У меня есть DataGridView, связанный с BindingList<T> пользовательского бизнес-объекта, с полями DeckID, Name, UserID, Size и Notes.

Это вызывается из базы данных MSSQL через объект IDataReader. Теперь моя проблема заключается в том, что UserID — это целое число, которое в моей базе данных является внешним ключом к таблице с именем SystemUser с полем имени пользователя.
Что я хочу сделать, так это получить имя пользователя из таблицы SystemUser в моей базе данных. , и отображать это имя на основе идентификатора пользователя. Все это было очень легко в WebForms с использованием GridView, но не так просто в приложении WindowsForms.


person Jack    schedule 18.01.2012    source источник
comment
вы должны добавить тег платформы (silverlight, asp.net, winforms и т. д.)   -  person Muad'Dib    schedule 18.01.2012
comment
Вы можете написать собственный запрос, в котором вы присоединяетесь к этим таблицам.   -  person pistipanko    schedule 19.01.2012
comment
Верно, но тогда мне пришлось бы создать новый класс для хранения определенного запроса из SQL, а также поставщика данных и контроллера для этого класса. Я знаю, что это можно сделать в Web Forms, поэтому я почти уверен, что это должно быть выполнимо в Windows Forms. На мой взгляд, это должно быть что-то довольно обычное...   -  person Jack    schedule 19.01.2012


Ответы (1)


Кажется, я вижу, что вы ищете. Из экземпляра 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;

Теперь вы можете сделать свой следующий вызов базы данных, чтобы получить объект внешнего ключа и обновить любой объект графического интерфейса, который вы хотите. Удачи!

person user959729    schedule 18.01.2012
comment
Извините, я когда-либо делал вещи только на C#... Я вообще не знаю VB.NET, я не понимаю, что говорит вторая строка... но я знаю, как получить объекты с привязкой к данным из GridView. Я просто не понимаю, как заставить DataGridView автоматически выбирать данные внешней таблицы. - person Jack; 19.01.2012
comment
Если вы не хотите менять DTO для первоначального извлечения данных, вам придется сделать второй вызов базы данных. Поместите событие на изменение выбора. Там настройте вызов базы данных, используя внешний ключ. Сетка данных будет автоматически выбирать данные внешнего ключа при изменении вашего выбора. - person user959729; 19.01.2012
comment
Извините все, после нескольких сообщений в MSDN они вернули меня к статье здесь, в StackOverflow, и решение здесь: stackoverflow.com/questions/3758757/ - person Jack; 20.01.2012