2016-09-27 5 views
0

WinformsDataGridViewを使用して、ユーザー情報と所有しているロールを表示しています。 ロールを更新できるように同じグリッドを使用したいので、 の最後のDataGridViewTextBoxColumnDataGridViewComboBoxColumnに変更し、valueMemberプロパティとDataSourceプロパティを設定します。Winforms ComboBoxColumnの値が無効です

DataGridViewComboBoxColumnのDataSourceでは、Context.Roleを設定しました。

DataGridViewのDataSourceで、私は結合でクエリを設定しました。

データは正しく表示されますが、コンボは機能していません。 エラーが発生します。

datagridviewcomboboxcellの値が無効です。

これは私のコードです:

var query = from u in context.User 
join ur in context.UserRole on u.ID equals r.UserID 
join r in context.Role on ur.RoleID.ToString() equals r.ID.ToString() 
select new 
{u.ID, 
u.Nick, 
u.LastLogin, 
Role = ur == null ? String.Empty : r.Name 
}; 

DataGridViewTextBoxColumn ColID = new DataGridViewTextBoxColumn(); 
DataGridViewTextBoxColumn ColNick = new DataGridViewTextBoxColumn(); 
DataGridViewTextBoxColumn ColLast = new DataGridViewTextBoxColumn(); 
DataGridViewComboBoxColumn ColRole = new DataGridViewComboBoxColumn(); 

userDataGridView.Columns.Add(ColID); 
userDataGridView.Columns.Add(ColNick); 
userDataGridView.Columns.Add(ColLast); 
userDataGridView.Columns.Add(ColRole); 

ColID.DataPropertyName = "ID"; 
ColNick.DataPropertyName = "Nick"; 
ColLast.DataPropertyName = "LastLogin"; 

ColRole.DataPropertyName = "Role"; 
ColRole.DataSource = context.Role.ToList(); 
ColRole.ValueMember = "ID"; 

userDataGridView.DataSource = query.ToList(); 

私が欠けているかについての任意のアイデア?

答えて

0

最初にgridviewデータソースを設定する前に、アンバインドしたcomboboxColumnを追加して名前を付け、datasourceを設定してからdatagridviewデータソースを設定します。

var query = from u in context.User 
join ur in context.UserRole on u.ID equals r.UserID 
join r in context.Role on ur.RoleID.ToString() equals r.ID.ToString() 
select new 
{u.ID, 
u.Nick, 
u.LastLogin, 
Role = ur == null ? String.Empty : r.Name 
}; 

DataGridViewTextBoxColumn ColID = new DataGridViewTextBoxColumn(); 
DataGridViewTextBoxColumn ColNick = new DataGridViewTextBoxColumn(); 
DataGridViewTextBoxColumn ColLast = new DataGridViewTextBoxColumn(); 
DataGridViewComboBoxColumn ColRole = new DataGridViewComboBoxColumn(); 

ColID.DataPropertyName = "ID"; 
ColNick.DataPropertyName = "Nick"; 
ColLast.DataPropertyName = "LastLogin"; 

ColRole.DataPropertyName = "Role"; 
ColRole.DataSource = context.Role.ToList(); 
ColRole.ValueMember = "ID"; 

userDataGridView.Columns.Add(ColID); 
userDataGridView.Columns.Add(ColNick); 
userDataGridView.Columns.Add(ColLast); 
userDataGridView.Columns.Add(ColRole); 

userDataGridView.DataSource = query.ToList(); 
関連する問題