您的位置:首页 > 编程语言 > C#

用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;

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息