如果想要实现两个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;
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-130568/ ,如需转载,请注明出处,否则将追究法律责任。