我认为我的问题是描述性的,或者在数据网格文档中的Microsoft问题是,如何让组合框列显示基于不同组合框列的值的子数据集?
我有一个包含3个表的DS,Customers,Orders,OrderDetails。 订单详细信息位于DataGridView中,有两个组合框列,1个是Location,1个是产品。两者都来自单独的查找数据集。
我想要的是当用户选择位置组合时,应将产品组合过滤到可用的位置。产品与LocationID
相关这是文档中的解决方案,但它对我有用。
private void Form1_Load(object sender, EventArgs e)
{ this.territoriesTableAdapter.Fill(this.northwindDataSet.Territories); this.regionTableAdapter.Fill(this.northwindDataSet.Region);
// Setup BindingSource for filtered view.
filteredTerritoriesBS = new BindingSource();
DataView dv = new DataView(northwindDataSet.Tables["Territories"]);
filteredTerritoriesBS.DataSource = dv;
}
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { if(e.ColumnIndex == territoryComboBoxColumn.Index) { //将组合框单元格数据源设置为已过滤的BindingSource DataGridViewComboBoxCell dgcb =(DataGridViewComboBoxCell)dataGridView1 [e.ColumnIndex,e.RowIndex]; dgcb.DataSource = filteredTerritoriesBS;
// Filter the BindingSource based upon the region selected
this.filteredTerritoriesBS.Filter = "RegionID = " +
this.dataGridView1[e.ColumnIndex - 1, e.RowIndex].Value.ToString();
}
}
private void dataGridView1_CellEndEdit(object sender,DataGridViewCellEventArgs e) { if(e.ColumnIndex == this.territoryComboBoxColumn.Index) { //将组合框单元重置为未过滤的BindingSource DataGridViewComboBoxCell dgcb =(DataGridViewComboBoxCell)dataGridView1 [e.ColumnIndex,e.RowIndex]; dgcb.DataSource = territoriesBindingSource; //未过滤
this.filteredTerritoriesBS.RemoveFilter();
}
}
答案 0 :(得分:0)
我发现了vb-tips.com提供的一种洗剂 它似乎工作得很好,并在加载表格时过滤DGV 这是我的代码; http://codepaste.net/wra8qw