2016-09-27 28 views
0

我在Winforms中使用DataGridView來顯示用戶信息及其擁有的角色。 由於我想使用相同的網格來更新角色,我更改 最後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();