DataGridView显示主从表示例及注意事项(转)
来源:互联网 发布:网络诈骗危害性 编辑:程序博客网 时间:2024/05/29 15:34
(转载来源:http://blog.csdn.net/hulihui)在.NET的Windows Forms数据处理应用中,经常需要处理主从表情况。例如:SQL Server 2000的Northwind数据库Custumers表和Orders表中,一个客户对应多个定单(用关系数据库理论的ER概念模型描述,客户实体与定单实体是1:N的关系)。编程时,可以用一个DataGridView显示Customers记录(主表),另一个DataGridView显示当前Customer的定单明细(从表)。当点选主表DataGridView的Customers记录时,从表DataGridView自动过滤显示对应CustomerID的全部Orders记录(见上图)。C# 2005/2008中的BindingSource组件和DataSet/DataRelation类提供了一个简便的处理方法,见如下实现步骤和示例代码。
- 建立一个DataSet数据集对象,使用DataAdaper填充两个DataTable表:Customers和Orders,分别包含全部的Customers记录和Orders记录。也可直接创建和填充数据表;
- 以Custumers的主键CustomerID和Orders的外键CustomerIdD建立一个主从DataRelation关系对象,并添加该对象到DataSet中;
- 使用两个BindingSource组件:bs_Customers和bs_Orders,分别连接表数据集DataSet的表Customers和关系DataRelation;
- 使用两个DataGridView组件,分别连接bs_Customers和bs_Orders。
using System;与主表的常规绑定方式不同,从表bs_Orders的数据源和数据成员的绑定技巧是:
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
SqlConnectionStringBuilder ssb = new SqlConnectionStringBuilder();
conn.ConnectionString =
"Data Source=localhost; Initial Catalog=Northwind; Integrated Security = True;";
conn.Open();
DataSet dbSet = new DataSet(); // 创建数据集
using (SqlDataAdapter da = new SqlDataAdapter("select * from Customers", conn))
{
da.Fill(dbSet, "Customers"); // 填充一个 Customers 表
}
using (SqlDataAdapter da = new SqlDataAdapter("select * from Orders", conn))
{
da.Fill(dbSet, "Orders"); // 填充一个 Orders 表
}
DataColumn parentCol = dbSet.Tables["Customers"].Columns["CustomerID"];
DataColumn childCol = dbSet.Tables["Orders"].Columns["CustomerID"];
DataRelation relation =
new DataRelation("FK_Customers_Orders", parentCol, childCol); // 建立主从关系
dbSet.Relations.Add(relation); // 添加主从关系到数据集中
BindingSource bs_Customers = new BindingSource(); // 创建绑定源
BindingSource bs_Orders = new BindingSource();
bs_Customers.DataSource = dbSet;
bs_Customers.DataMember = "Customers"; // 绑定到数据源——主表
bs_Orders.DataSource = bs_Customers;
bs_Orders.DataMember = "FK_Customers_Orders"; // 绑定到关系——从表,注意:区分大小写
dataGridView1.DataSource = bs_Customers; // DataGridView 显示
dataGridView2.DataSource = bs_Orders;
}
}
}
- bs_Orders.DataSource = bs_Customers,即主表的BindingSource数据源;
- bs_Orders.DataMember = "FK_Customers_Orders",即数据集dsSet中的主从关系名。
- 并不要求CustomerID是Customers的主键和Orders的外键,但要满足外键的基本条件——主表的CustomerID值唯一,从表的CustomerID值对应主表的某个值。见本文后面给出的程序代码;
- 主从关系是通过数据集DataSet、数据关系DataRelation和数据源绑定组件BindingSource体现的,与显示控件无关。此时,可以使用ComboBox、ListBox等显示主从关系情况;
- 主从关系中的数据表,还可以是定制的对象集,具体使用可以参考《Windows Forms 2.0数据绑定——.NET智能客户端数据应用程序设计》一书。
private void Form1_Load(object sender, EventArgs e)
{
DataSet dbSet = new DataSet(); // 创建数据集
DataTable customers = new DataTable("Customers"); // 创建客户表
DataColumn dc = new DataColumn("CustomerID", typeof(int)); // 创建字段
customers.Columns.Add(dc);
customers.Rows.Add(1); // 添加两个记录
customers.Rows.Add(2);
DataTable orders = new DataTable("Orders"); // 创建定单表
dc = new DataColumn("OrderId", typeof(int));
orders.Columns.Add(dc);
dc = new DataColumn("CustomerID", typeof(int));
orders.Columns.Add(dc);
orders.Rows.Add(1, 1); // 添加记录,注意:CustomerID必须与前面表的某个值相同
orders.Rows.Add(2, 1); // 即要满足外键的条件
orders.Rows.Add(3, 2);
orders.Rows.Add(4, 2);
dbSet.Tables.Add(customers);
dbSet.Tables.Add(orders);
// 接前面的代码部分
}
- DataGridView显示主从表示例及注意事项
- DataGridView显示主从表示例及注意事项
- DataGridView显示主从表示例及注意事项
- DataGridView显示主从表示例及注意事项(转)
- DataGridView控件中显示图片及其注意事项
- DataGridView控件中显示图片及其注意事项
- DataGridView控件中显示图片及其注意事项
- DataGridView控件中显示图片及其注意事项
- [转]DataGridView显示行号
- GridView 显示 主从表(Master-Detail)注意事项
- C# dataGridView控件中加入comboBox控件及注意事项
- redis 主从配置实例、注意事项、及备份方式
- MySQL5.5主从复制架构配置及注意事项
- DataGridView绑定注意事项
- mysql主从同步注意事项
- Redis主从复制注意事项
- mysql主从同步注意事项
- Spry学习(二)----XML数据集及主从表显示
- Effective Java精简
- C#验证码生成
- 08年记
- S60 3rd Edition和S60 3rd Edition, FP1中不同的浏览器UID
- 朋友 新年快乐
- DataGridView显示主从表示例及注意事项(转)
- 在Vista的IIS系统中运行ASP的几个配置问题
- 【编程游戏】贺岁放礼花。(点燃续帖1-142楼KiteGirl的焰火)
- ASP.NET Web 应用程序与ASP.NET网站比较
- sql 常用语句积累
- 写在年初
- 2009.01.01 公布我的牛年5大愿望
- Windows Vista下IIS使用常见问题
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(3)从零开始开发服务器控件】★★★