基本DataGridView问题
本文关键字:问题 DataGridView 基本 | 更新日期: 2023-09-27 18:19:11
我有一个数据源是一个交集表的绑定列表的数据视图。我有另一个绑定列表作为查找,并绑定到一个列,是一个DataGridViewComboBoxColumn类型。我简化了绑定列表,如下所示:
public IList<Flight> flights = new List<Flight>()
{
new Flight { DepartureID = 1, DestinationID = 1, FlightNumber = "101" },
new Flight { DepartureID = 2, DestinationID = 2, FlightNumber = "202" },
new Flight { DepartureID = 3}
};
public IList<Departure> departures = new List<Departure>()
{
new Departure {ID = 1, City = "Toronto"},
new Departure {ID = 2, City = "Chicago"},
new Departure {ID = 3, City = "New York"}
};
public IList<Destination> destinations = new List<Destination>()
{
new Destination {ID = 1, City = "London"},
new Destination {ID = 2, City = "Paris"},
new Destination {ID = 3, City = "Amsterdam"}
};
我有五列在我的datagridview:
- 目的地ID:文本框
- 出发:文本框
- 目的ID:文本框
- 目的地:Combobox
- 航班号:文本框
我有三个问题:
1)出发是只读的。我想显示ID和城市。如何添加文本框来自动查找City值?我想到了OnCellPainting事件并查找它,但e.Value是只读的。是否有一些OnCellDrawing事件类似于Delphi.
2)在目的地的组合框上,一旦用户从组合框中选择了一个值,我如何也更新目的地ID ?
3)我如何处理的情况下,我只有值的出发(例如,这条记录(new Flight { DepartureID = 3}
)抛出一个无效的值错误,因为没有值的组合框查找)
1)设置出发城市的最简单方法是使用像目的地一样的ComboBox
。将其绑定到目的地列表,并将此列标记为ReadOnly
。这将在没有代码的情况下处理Departure。
2)你应该用BindingSource
绑定你的DataGridView
和你的List
航班。因为你的ComboBox
ValueMember
是你的ID,你的DisplayMember
是城市的名字,它会自动更新你的ID。
3)如果你想绑定你的数据,模板应该是一样的。你应该把目的地和航班号记在清单上。如果它们没有值,则将它们设置为null
。你可以处理null
值,而不能处理不存在的属性。new Flight { DepartureID = 3, DestinationID = null, FlightNumber = null }