2016-08-21 38 views
0

我上一个项目,我需要制定分配/修改/删除角色的用户C# - 字符串添加到DataGridView的列表时,数据源已经粘合到DataGridView的

我有一个功能工作用户角色列表附加到DataGridView的DataSource,如下所示。

dgvAssignedRoles.DataSource = _userBll.ReadUserRoles(userId); 

它看起来象下面这样:

UserRoles

我想补充一些更多的角色(例如像,HR_Admin,Manager_Role,EndUser_Role等)的用户,这将是牵强从另一种形式

的RoleList形式的角色列表 -

// Global Declaration 
public List<string> SeletedRoleList { get; set; } 

// Inside the Add function 
SeletedRoleList = new List<string>(); 
foreach (DataGridViewRow row in dgvDataList.Rows) 
{ 
    if (row.Selected) 
    { 
     string str = row.Cells[0].Value.ToString(); 
     SeletedRoleList.Add(str); 
    } 
} 

而我试图将这些SelectedRoleList添加到已经具有一些角色的DataGridView中,但它在下面引发了一个错误。

用户表单 -

 var rolelistform = new RoleList(); 
     rolelistform.ShowDialog(); 

     foreach (var v in rolelistform.SeletedRoleList) 
     { 
      dgvAssignedRoles.Rows.Add(v); 
     } 

行不能被编程方式添加到DataGridView的行集合时,该控件是数据绑定。

我知道一旦DataSource属性用于绑定到数据,您不能直接将行直接添加到DataGridView。

任何人都有一个想法,我怎么能实现这一点,并明确添加行到DataSource属性。

谢谢!

+0

将它们添加到数据源列表('SeletedRoleList'?) – Plutonix

回答

0

后,最后我自己想通了最佳的解决方案。

在用户的形式,宣布全球List<string>变量

// Global Declaration  
private static List<string> AssignedRoleList { get; set; } 

然后分配已有的用户角色,以这个全局变量AssignedRoleList和用户角色数据一定到DataGridView的。以下是代码。

AssignedRoleList = new List<string>(); 
AssignedRoleList = _userBll.ReadUserRoles(userId); 
if (AssignedRoleList.Count > 0) 
{ 
    var source = new BindingSource {DataSource = AssignedRoleList.Select(x => new {Roles = x})}; 
    dgvAssignedRoles.DataSource = source; 
} 

然后后,我添加了新的SelectedRoleListAssignedRoleList,它一定到DataGridView的。

NewRoleList = new List<string>(); 
// Assigned Old user roles to the new one. 
if (AssignedRoleList != null) NewRoleList = AssignedRoleList; 

foreach (var v in dataviewform.SeletedDataList) 
{ 
    bool status = true; 
    // Check if user already have the roles 
    if (dgvAssignedRoles.Rows.Cast<DataGridViewRow>().Any(row => Equals(row.Cells[0].Value, v))) 
    { 
     MessageBox.Show("Role already exist."); 
     status = false; 
    } 
    // Adding the new selected roles to the existence user role if not present 
    if (status) 
     NewRoleList.Add(v); 
    } 
    // Finally attaching the both new and old user roles to datagridview 
    var source = new BindingSource {DataSource = NewRoleList.Select(x => new {Roles = x})}; 
    dgvAssignedRoles.DataSource = source; 
} 
0
 DataTable DT = (DataTable)dgvAssignedRoles.DataSource; 
     DataRow DR = DT.NewRow(); 
     DR[0] = "your Roles"; 
     DT.Rows.Add(DR); 

结合数据源铸就DataTable,并添加新行

相关问题