首页 > 解决方案 > C# 和 WPF - 数据集到 DataGrid - 连接数据集中的两个表

问题描述

我想解决我在制作应用程序时遇到的一个问题,该应用程序可以帮助使用 C# WPF 程序在 Access 数据库中显示和修改数据。

我所拥有的——澄清一下——这是我可以访问的数据库。数据库包含三个表和关系。还有一些查询,因为过去它完全适用于 VBA。

现在我收到了为这个数据库(数据库)做一个用户友好的应用程序的请求。

我能做的是从主表加载数据让我说表“零件”。此表包含一些零件数据,例如 ID、名称、组 ID 等。还有另一个表称为 Group。组包含 3 个组名。例如,它可以是软件、硬件、其他。

如果我是用户并且知道 SQL,我会写: EDIT:/edited select

SELECT ID, Parts.Name , Parts.Group , GroupName.Group from PARTS 
LEFT JOIN Group ON Parts.GroupID = Group.ID 

这也是在 Access DB 文件中的 QUERY 中创建的。单击此视图后,它会为您提供您喜欢的视图 - 仍然在 Access DB 文件中的 VBA 中。

我在 C# 中所做的是加载了 DB 包含的所有表。

我有

ds.Tables["Parts"]
ds.Tables["Groups"]

当你分配

DataView dv = new DataView;
dv = DataSet.Tables["Parts"].DefalutView; 
//PreviouslyCretedDatagridInWPF:
dataGrid.DataSource = dv;  

如果您加载应用程序,Grid 的加载速度很快,我可以在一秒钟内加载窗口 - “parts”表中的数据 - 大约有 10,000 行和 27 列。

但是,如果我尝试使用例如简单的 If 条件来做一些加入,那么就像

ds.Tables["TempParts"]也可以只是一个简单的克隆表,在位置上添加一个字符串类型的列,例如 28。

for(i=0;i<ds.Tables["Parts"].Rows.Count;i++) {     
    for( j=0;j<ds.tables["groups"].Rows.Count;j++){
    //0is ID column//10is groupIDcolumn)
    if(ds.Tables["TempParts"].Rows[i][10] == ds.Tables["groups"].Rows[j][0]) 
     { ds.Tables["TempParts"].Rows[i][28]= ds.Tables["groups"].Rows[j][0];}
} 

所以我可以像这样分配或执行加入。但我觉得这不是正确或最好的方法。因为这个我问天气有没有一种方法可以更方便甚至更快,因为这真的是非常耗时的操作。

下一步当然是在新窗口中显示单击的行并进行一些编辑并使用接受更改来应用,因此我也在编辑窗口中使用了 if 条件,但我手动编写了它,这意味着如果用户选择“硬件”,它会将数字 1 分配给 groupID零件表中的列我觉得这也不是正确的方法,或者是吗?

我认为将来的表组也将是可编辑的,因此“组”和 ID 不能存储在某个静态数组或结构中。好吧,我必须处理数据表中加载的数据。

所以我想做的是在我的数据集上方执行连接,如果我选择一些行并编辑,我还想检查 ID 属于什么,例如 GroupID 文本值,它显示给用户,就像我提到的“软件”“硬件”等. 并将此 id 分配给主数据表并接受更改...

问题是什么是更快/方便的方法来做到这一点。

在数据库中(在)上面做,用代码本身做,使用一些可以更快地执行此类操作的库?

当然,代码中可能会有一些错误,因为我这里没有真正的代码,我试图尽可能地简化它。

感谢您的时间。

标签: c#wpfms-accessdatasetwpfdatagrid

解决方案


推荐阅读