我与在windowsforms 在DataGridView的组合框delaeaing假设我有一个datagridview的2个combboxes所以我的问题是
如何根据本datagridview的从另一个comboboxcolum选择的值填充在datagridview的comboboxcolumn2组合框在datagridview的
回答
嗯,我想我迟到了,但你应该做的是将价值改变的事件处理程序附加到你的列。处理程序应该在您选择新值时触发,然后使用传递给该函数的参数来确定哪一行被更改,并更改该行中的第二个组合框。我会举一个例子,但我几乎肯定你不会回过头来看看这个答案。
编辑: 没想到你真的会为此而复出,但这里有一种方法来实现动态ComboBoxes。我不能说我完全为这个答案感到自豪,因为它不适用于数据绑定(你将不得不自己添加每一行并设置适当的初始值),但至少这个解决方案可以指导你朝着正确的方向或者一个新的。
public partial class DualComboBoxGridViewForm : Form
{
private Dictionary<Country, List<City>> locations;
public DualComboBoxGridViewForm()
{
InitializeComponent();
InitializeLocations();
dataGridView1.Rows.Add(new DataGridViewRow());
}
private void InitializeLocations()
{
// Loading these from a database would be highly recommended, I
// just did it like this with a dictionary to it would be easier
// to show.
locations = new Dictionary<Country, List<City>>();
List<City> americanCities = new List<City>();
americanCities.Add(new City { ID = 0, Name = "Please Select A City" });
americanCities.Add(new City { ID = 1, Name = "Boston" });
americanCities.Add(new City { ID = 2, Name = "New York" });
List<City> japaneseCities = new List<City>();
japaneseCities.Add(new City { ID = 0, Name = "Please Select A City" });
japaneseCities.Add(new City { ID = 1, Name = "Tokyo" });
japaneseCities.Add(new City { ID = 2, Name = "Kyoto" });
locations.Add(new Country { ID = 0, Name = "Please Select A Country" }, new List<City>());
locations.Add(new Country { ID = 1, Name = "USA" }, americanCities);
locations.Add(new Country { ID = 2, Name = "Japan" }, japaneseCities);
}
private void InitializeDataGridView()
{
dataGridView1.AutoGenerateColumns = false;
dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;
// Create columns
DataGridViewTextBoxColumn eventNameColumn = new DataGridViewTextBoxColumn();
eventNameColumn.HeaderText = "Event";
DataGridViewComboBoxColumn countryComboBox = new DataGridViewComboBoxColumn();
countryComboBox.Name = "Country";
countryComboBox.HeaderText = "Country";
countryComboBox.ValueMember = "ID";
countryComboBox.DisplayMember = "Name";
foreach (Country country in locations.Keys)
{
countryComboBox.Items.Add(country);
}
DataGridViewComboBoxColumn cityComboBox = new DataGridViewComboBoxColumn();
cityComboBox.Name = "City";
cityComboBox.HeaderText = "City";
cityComboBox.ValueMember = "ID";
cityComboBox.DisplayMember = "Name";
dataGridView1.Columns.Add(eventNameColumn);
dataGridView1.Columns.Add(countryComboBox);
dataGridView1.Columns.Add(cityComboBox);
}
// Triggers when a column enters edit mode (new value not yet assigned).
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs args)
{
// we only want to change the city box if a country value is changed
if (dataGridView1.CurrentCell.ColumnIndex == dataGridView1.Columns["Country"].Index)
{
ComboBox countryBox = args.Control as ComboBox;
countryBox.SelectedIndexChanged += countryComboBox_SelectedIndexChanged;
}
}
private void countryComboBox_SelectedIndexChanged(object sender, EventArgs args)
{
ComboBox box = sender as ComboBox;
DataGridViewComboBoxCell cityCell = dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[dataGridView1.Columns["City"].Index] as
DataGridViewComboBoxCell;
cityCell.Items.Clear();
foreach (City city in locations[box.SelectedItem as Country])
{
cityCell.Items.Add(city);
}
if (cityCell.Items.Count > 0)
{
cityCell.Value = cityCell.Items[0];
}
// Remove event handler to prevent memory leak
box.SelectedIndexChanged -= countryComboBox_SelectedIndexChanged;
}
}
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
}
public class City
{
public int ID { get; set; }
public string Name { get; set; }
}
@Denjamin 我复出,我等着你的榜样 – 2012-10-15 11:31:20
@mohammedsameeh我为没有找到一种方法,使数据绑定的工作表示歉意,但它是相当棘手,因为您需要在数据绑定时动态分配城市组合框。您可以使用虚拟模式执行此操作,但只有在列未被绑定时才能触发事件。一个解决方法是创建绑定到实际数据的隐藏列,并使一些可见的未绑定列显示下拉列表(只需使用像EditingControlShowing这样的事件来更新隐藏的数据绑定列。 – 2012-10-15 17:54:43
- 1. 的DataGridView +组合框+从2个表
- 2. DataGridView组合框
- 3. DataGridView组合框
- 4. dataGridView与组合框
- 5. datagridview中的组合框
- 6. DataGridView中的组合框
- 7. datagridview中的c#组合框
- 8. 组合框在编辑模式的DatagridView
- 9. 在Winforms的DataGridView中检查组合框
- 10. BindingSource与DataGridView组合框
- 11. DataGridView组合框和主键
- 12. DataGridView中级联组合框
- 13. Datagridview - 多列组合框
- 14. 组合框绑定DataGridView
- 15. DataGridView组合框列绑定
- 16. DataGridView的组合框柱不显示选择组合框的值
- 17. 在datagridview中更新组合框列
- 18. Datagridview组合框仅在某些行中
- 19. 在组合框选择时填充DataGridview
- 20. 在DatagridView中填充组合框列VB.Net
- 21. 在dataGridView列中访问组合框?
- 22. DevExpress在datagridview中级联组合框
- 23. 了JavaFx 2 - 在组合框
- 24. DataGridView的组合框EditingControlShowing事件
- 25. datagridview中的可移动组合框
- 26. 专门填充DataGridView中的组合框
- 27. DataGridView中的动态组合框
- 28. 带适配器和组合框的DataGridView
- 29. DataGridView的组合框扩大发行
- 30. DataGridView的组合框格室C#
你的意思是说,你有两个组合框的每一行的组合框? – yonan2236 2010-10-16 03:08:26
是的,我的意思是这 – 2010-10-16 04:45:18
请回答,因为这个问题是当务之急谢谢^ _^ – 2010-10-16 17:29:12