2013-05-28 4 views
1

У меня есть WinForm. В этой форме я показываю данные из строки таблицы. У меня есть таблицы комментариев и пользователей:Linq-to-sql to Combobox binding (Winforms)

Комментарии: {ID (INT), Текст (NVARCHAR), UserId (интермедиат)}

Пользователи: {ID (INT), Name (NVARCHAR)}

В форме у меня есть TextBox и Combobox. В текстовом поле я не буду показывать «Текст» из комментариев (пользователь может редактировать это поле, данные должны быть сохранены в таблице) и Name from table Users (где Comments.UserId = Users.ID).

я следующий код:

FormDataClassesDataContext dc = new FormDataClassesDataContext(); 

_comment = (from comment in dc.Comments 
        where comment.ID == 1 
        select comment).FirstOrDefault(); 
_user = (from users in dc.Users 
        where users.ID == _comment.UserId 
        select users).FirstOrDefault(); 

textBoxComment.DataBindings.Add("Text", _comment, "Text"); // <-OK 
comboBoxAssessor.DataSource = dc.Users; 
comboBoxAssessor.DisplayMember = "Name"; 
comboBoxAssessor.ValueMember = "ID"; 
comboBoxAssessor.DataBindings.Add("SelectedItem", _comment, "UserId"); 

, а затем

dc.SubmitChanges();

, но я стал «Невозможно передать "MyApp.Forms.User" на "Int32"

ответ

1

Выбранный элемент выпадающего списка является текущим объектом в его источнике данных, в данном случае: User. Вы должны использовать SelectedValue:

comboBoxAssessor.DataBindings.Add("SelectedValue", _comment, "UserId"); 

который возвращает значение свойства, которое определяют в ValueMember.

+0

Супер! Меня устраивает. –

0

SelectedItem должен быть типа User, если я не ошибаюсь. И вы связываете с ним комментарий.UserId (int).