我试图在查询完成后向数据集添加一个额外的列,并用数据填充该新列 . 我有以下数据库关系:
EmployeeGroups
/ \
Groups Employees
Empoyees 保存该个人的所有数据,我将唯一键命名为UserID .
Groups 包含员工可以参与的所有组,即超级用户,管理员,用户;我将命名唯一键GroupID
EmployeeGroups 包含每个员工所属的组的所有关联 . (UserID | GroupID)
我想要完成的是在查询所有用户后,我想循环每个用户,并通过向名为'Groups'的数据集中添加一个新列来添加一个新用户组所属的组,并使用typeof字符串插入组用户是其中的一部分 . 然后,通过使用数据绑定,将列表视图与所有员工及其组关联填充
我的代码如下;位置5是我要添加到数据集的新列 .
string theQuery = "select UserID, FirstName, LastName, EmployeeID, Active from Employees";
DataSet theEmployeeSet = itsDatabase.runQuery(theQuery);
DataColumn theCol = new DataColumn("Groups", typeof(string));
theEmployeeSet.Tables[0].Columns.Add(theCol);
foreach (DataRow theRow in theEmployeeSet.Tables[0].Rows)
{
theRow.ItemArray[5] = "1234";
}
目前,代码将创建新列,但是当我将数据分配给该列时,将不会分配任何内容,我缺少什么?
如果我能提供进一步的探索或信息,请告诉我 .
谢谢你们
EDIT
更改数据库图表,错了
2 回答
当您使用itemarray时,您必须一次设置所有值 .
所以:
我同意你不应该这样使用它...
我想getter会复制数据并填充该副本的元素5
你应该做 :
要么 :
假设您的员工/组和关联之间存在关系完整性,您可以将表放在
DataSet
中,添加DataRelation
以定义表之间的关系,然后在关联表中创建DataColumn
,使用DataColumn.Expression
查找值相关表格 . 这将为您提供一个EmployeeGroups
表,可以显示每个员工和组名 .可悲的是,如果你想转向其他方式,即在Employees表中创建一个列,将所有组聚合在一起(这就是你所描述的),你就不能用表达式来完成 . 在这种情况下,最简单的方法是执行您描述的操作,并向Employees表中添加一列 . 但LINQ使得填充该列非常简单,如果您已经创建了表之间的关系,并且EmployeeGroups表中的列获得了员工和组名,那就更好了 .
这带给我们这个 . 这是一个使用Employees,Groups和EmployeeGroups表创建和填充数据集的类 . 它创建关联表和其他两个表之间的关系,这些关系需要
DataColumn.Expression
和DataRow.GetChildRows
才能发挥其魔力 . 它还将表公开为WPF可以绑定的IList
类型:这是一个显示所有这些信息的窗口的XAML: