用C#简单实现主表与子表的联动关系
2006-04-02 19:58
357 查看
如果想要实现两个DataGrid的主子表联动,可以参看这两篇文章。
http://www.syncfusion.com/faq/windowsforms/search/780.aspx
http://www.syncfusion.com/faq/windowsforms/search/1012.aspx
这里介绍的是ComboBox与DataGrid的主子表联动,其实并不像上面一样要使用到DataSet的Relations。具体步骤如下:
1. 创建主子表数据(我这里简化,可以从数据库获得):
private void CreateEmployeeTable( out DataTable dtEmployee )
{
dtEmployee = new DataTable();
dtEmployee.TableName = "EmployeeInfo";
//Set data columns
dtEmployee.Columns.Add( "EmployeeID", typeof( int ) );
dtEmployee.Columns.Add( "DepartmentID", typeof( int ) );
dtEmployee.Columns.Add( "Name", typeof( string ) );
dtEmployee.Columns.Add( "Phone", typeof( string ) );
dtEmployee.Columns.Add( "Address", typeof( string ) );
// Add data
dtEmployee.Rows.Add( new object[]{ 1, 1, "Sales1", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 2, 1, "Sales2", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 3, 2, "HR1", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 4, 2, "HR2", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 5, 3, "Tech1", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 6, 3, "Tech2", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 7, 4, "Software1", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 8, 4, "Software2", "*****","*****" } );
}
2. 绑定主表数据到ComboBox:
private DataSet ds = null;
private void BindData()
{
ds = new DataSet();
DataTable dtDepartment, dtEmployee;
CreateDepartmentTable( out dtDepartment );
ds.Tables.Add( dtDepartment );
CreateEmployeeTable( out dtEmployee );
ds.Tables.Add( dtEmployee );
// Bind data to combobox
cmbDepartment.DataSource = ds.Tables["DepartmentInfo"];
cmbDepartment.DisplayMember = "DepartmentName";
cmbDepartment.ValueMember = "DepartmentID";
if( cmbDepartment.Items.Count > 0 )
BindDataGrid();
}
3. 设定ComboBox的SelectedIndexChanged事件:
private void cmbDepartment_SelectedIndexChanged(object sender, System.EventArgs e)
{
int nDepartmentID = 0;
try
{
nDepartmentID = Convert.ToInt32( cmbDepartment.SelectedValue.ToString() );
BindDataGrid();
}
catch{}
}
4. 根据当前ComboBox的选项去绑定DataGrid:
private void BindDataGrid()
{
DataView dv = new DataView( ds.Tables["EmployeeInfo"] );
dv.AllowDelete = false;
dv.AllowEdit = false;
dv.AllowNew = false;
dv.RowFilter = "DepartmentID = " + cmbDepartment.SelectedValue.ToString();
dv.RowStateFilter = DataViewRowState.CurrentRows;
dv.Sort = "EmployeeID ASC";
dtgEmployees.DataSource = dv;
}
http://www.syncfusion.com/faq/windowsforms/search/780.aspx
http://www.syncfusion.com/faq/windowsforms/search/1012.aspx
这里介绍的是ComboBox与DataGrid的主子表联动,其实并不像上面一样要使用到DataSet的Relations。具体步骤如下:
1. 创建主子表数据(我这里简化,可以从数据库获得):
private void CreateEmployeeTable( out DataTable dtEmployee )
{
dtEmployee = new DataTable();
dtEmployee.TableName = "EmployeeInfo";
//Set data columns
dtEmployee.Columns.Add( "EmployeeID", typeof( int ) );
dtEmployee.Columns.Add( "DepartmentID", typeof( int ) );
dtEmployee.Columns.Add( "Name", typeof( string ) );
dtEmployee.Columns.Add( "Phone", typeof( string ) );
dtEmployee.Columns.Add( "Address", typeof( string ) );
// Add data
dtEmployee.Rows.Add( new object[]{ 1, 1, "Sales1", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 2, 1, "Sales2", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 3, 2, "HR1", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 4, 2, "HR2", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 5, 3, "Tech1", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 6, 3, "Tech2", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 7, 4, "Software1", "*****","*****" } );
dtEmployee.Rows.Add( new object[]{ 8, 4, "Software2", "*****","*****" } );
}
2. 绑定主表数据到ComboBox:
private DataSet ds = null;
private void BindData()
{
ds = new DataSet();
DataTable dtDepartment, dtEmployee;
CreateDepartmentTable( out dtDepartment );
ds.Tables.Add( dtDepartment );
CreateEmployeeTable( out dtEmployee );
ds.Tables.Add( dtEmployee );
// Bind data to combobox
cmbDepartment.DataSource = ds.Tables["DepartmentInfo"];
cmbDepartment.DisplayMember = "DepartmentName";
cmbDepartment.ValueMember = "DepartmentID";
if( cmbDepartment.Items.Count > 0 )
BindDataGrid();
}
3. 设定ComboBox的SelectedIndexChanged事件:
private void cmbDepartment_SelectedIndexChanged(object sender, System.EventArgs e)
{
int nDepartmentID = 0;
try
{
nDepartmentID = Convert.ToInt32( cmbDepartment.SelectedValue.ToString() );
BindDataGrid();
}
catch{}
}
4. 根据当前ComboBox的选项去绑定DataGrid:
private void BindDataGrid()
{
DataView dv = new DataView( ds.Tables["EmployeeInfo"] );
dv.AllowDelete = false;
dv.AllowEdit = false;
dv.AllowNew = false;
dv.RowFilter = "DepartmentID = " + cmbDepartment.SelectedValue.ToString();
dv.RowStateFilter = DataViewRowState.CurrentRows;
dv.Sort = "EmployeeID ASC";
dtgEmployees.DataSource = dv;
}
相关文章推荐
- 设计模式--代理模式的简单实现(C#)+类关系图
- C#省份城市下拉框联动简单实现方法
- C#实现简单聊天程序的方法
- Wed页动态下拉菜单-----C#简单实现
- c#简单实现二维数组和二维数组列表List<>的转置
- js简单的年月联动实现代码
- 利用.net(C#)执行sql脚本的简单实现
- 通同select便签实现简单的二级联动
- C# 下写入视频的简单实现
- 原生js三级联动的简单实现代码
- C# 实现IP视频监控(摄像头)画面推送(简单的不能再简单的DEMO)
- C#实现WAP网站二级联动
- C#简单实现发送手机短信
- c#实现类似QQ的简单聊天程序,可支持广域网。
- C#实现一个简单的REST service
- 最简单js代码实现select二级联动下拉菜单(测试通过)
- C# socket 简单实现server呈现client发送信息
- C# WPF DataGrid控件实现三级联动
- C#内容分页简单实现代码及详解
- 简单实现ajax三级联动效果