若是想实现,根据某个查询条件,比如表头的“产品药监码”,查询出一个数据库内的“产品批号、销售出库单号”等相关信息,再根据所查询出的“销售出库单号”,查询出另一个数据库内,所对应的业务员,最后一起显示在一个数据表里面,用WINFORM的DataGridView显示出来,请问在C#内怎么实现,请说一下思路和方法,及代码示例,谢谢;
2条回答 默认 最新
- wanghui0380 2024-08-05 09:42关注
始终丢不开dt。
那就dt把,dt可以设置父子级联关系。所以你想怎么查就怎么查,查好了设置级联关系即可。
我没数据,就直接手动模拟// 创建 DataSet DataSet dataSet = new DataSet(); // 创建父表 DataTable tableParent = new DataTable("Parents"); tableParent.Columns.Add("ParentID", typeof(int)); tableParent.Columns.Add("ParentName", typeof(string)); // 创建子表 DataTable tableChild = new DataTable("Children"); tableChild.Columns.Add("ChildID", typeof(int)); tableChild.Columns.Add("ParentID", typeof(int)); // 外键 tableChild.Columns.Add("ChildName", typeof(string)); // 添加数据 tableParent.Rows.Add(1, "Parent 1"); tableParent.Rows.Add(2, "Parent 2"); tableChild.Rows.Add(1, 1, "Child 1-1"); tableChild.Rows.Add(2, 1, "Child 1-2"); tableChild.Rows.Add(3, 2, "Child 2-1"); // 将表添加到 DataSet dataSet.Tables.AddRange(new DataTable[] { tableParent, tableChild }); // 创建 DataRelation DataRelation relation = new DataRelation("ParentChild", tableParent.Columns["ParentID"], tableChild.Columns["ParentID"]); dataSet.Relations.Add(relation); // 绑定到 DataGridView dataGridView1.DataSource = dataSet; dataGridView1.DataMember = "Parents"; dataGridView1.AutoGenerateColumns = true;
这样的2个表都在同一个dataset里,而且他们具备级联关系。所以可以直接在datagridview里显示,默认情况datagridview会显示成带层级的,也就是前面有个+号,点击+号展开子数据
如果你需要类似left join那种效果。可以自己在写个函数手动创建一个dt,(其实也有办法自动创建,不过我不想介绍了,已经跟你说过很多次了,dt这东西该扔就扔,不可惜。这些玩意你不提我都不愿意想,他早就我脑袋不知道啥角落里吃灰,所以我不会在特别强调这类方法,也不会特别推荐这些东西,至于发的这些代码是chartgpt生成的,我自己都快10年没有碰dt了,也更不想在脑袋里去放这种已经用不上的技术)
//如果要left join效果,则根据关系从新创建一个 private DataTable CreateFlattenedTable(DataSet dataSet) { DataTable flatTable = new DataTable(); // 添加所需的列 flatTable.Columns.Add("ParentID", typeof(int)); flatTable.Columns.Add("ParentName", typeof(string)); flatTable.Columns.Add("ChildID", typeof(int)); flatTable.Columns.Add("ChildName", typeof(string)); foreach (DataRow parentRow in dataSet.Tables["Parents"].Rows) { var childRows = parentRow.GetChildRows("ParentChild"); if (childRows.Length == 0) { flatTable.Rows.Add(parentRow["ParentID"], parentRow["ParentName"], DBNull.Value, DBNull.Value); } else { foreach (var childRow in childRows) { flatTable.Rows.Add( parentRow["ParentID"], parentRow["ParentName"], childRow["ChildID"], childRow["ChildName"]); } } } return flatTable; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 公众号如何实现点击超链接后自动发送文字
- ¥15 用php隐藏类名和增加类名
- ¥15 算法设计与分析课程的提问
- ¥15 用MATLAB汇总拟合图
- ¥15 智能除草机器人方案设计
- ¥15 对接wps协作接口实现消息发送
- ¥15 SQLite 出现“Database is locked” 如何解决?
- ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
- ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题
- ¥100 无网格伽辽金方法研究裂纹扩展的程序