Code Bye

C# 主从表的处理方式求帮助

string sql1 = “Select *  From Customers”;
string sql2 = “Select *  From Orders”;
DataSet ds = new DataSet();
SqlDataAdapter SDA = new SqlDataAdapter(sql1, Db.GetConn());
SDA.Fill(ds, “Customers”);
SDA = new SqlDataAdapter(sqlBody, Db.GetConn());
SDA.Fill(ds, “Orders”);
DataColumn parentCol = ds.Tables[“Customers”].Columns[“CustomerID”];
DataColumn childCol = ds.Tables[“Orders”].Columns[“CustomerID”];
DataRelation relation =
new DataRelation(“FK_Customers_Orders”, parentCol, childCol);  // 建立主从关系
ds.Relations.Add(relation);  // 添加主从关系到数据集中
//=================================================================
 BindingSource bs_Customers = new BindingSource();  // 创建绑定源
BindingSource bs_Orders = new BindingSource();

bs_Customers.DataSource = ds;
bs_Customers.DataMember = “Customers”;  // 绑定到数据源——主表
bs_Orders.DataSource = bs_Customers;
bs_Orders.DataMember = “FK_Customers_Orders”;  // 绑定到关系——从表,注意:区分大小写
gridX1.DataSource = bs_Customers;  // DataGridView 显示
gridX2.DataSource = bs_Orders;
//==========================================
主从表能否一定需要这 BindingSource 来创建数据源,可以用DataTable来代替吗
希望高手们帮帮忙!
谢谢!
解决方案

20

20

DataSource可以直接赋DataTable啊

20

不知道你的代码有没有调试、测试通过?
你的代码,其关键是要让主从表自动匹配。假如你失去了自动化,那就完全没有达到程序设计要求。

20

例如使用 wpf、silverlight、winform 那样的高效率的本地进程的交互界面程序,用户操作控件跟数据DataTable 之间有自动化的 twoway 机制的绑定,数据改变了则界面就改变,界面改变了则数据就改变。不仅仅是修改,包括增加、删除,不同数据源之间的关联。
而假设你使用比较笨拙的 asp.net 方式,由于 asp.net 没有这个能力在服务器端去实时处理千里之外浏览器端的瞬间行为,它可以简化为用一些只有 oneway 机制的简单的数据绑定,不可能完成高级的双向绑定。
你选择组件,肯定是看内部机制,不是看哪一个对本人来说比较新。

20

假如设置了表关系, 那可以通过主表的一行查询子表的多行
DataRow row = ds.Tables[0].Rows[0];
DataRow[] childrow = row.GetChildRows(relation);

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# 主从表的处理方式求帮助