基本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})抛出一个无效的值错误,因为没有值的组合框查找)

基本DataGridView问题

1)设置出发城市的最简单方法是使用像目的地一样的ComboBox。将其绑定到目的地列表,并将此列标记为ReadOnly。这将在没有代码的情况下处理Departure。

2)你应该用BindingSource绑定你的DataGridView和你的List航班。因为你的ComboBox ValueMember是你的ID,你的DisplayMember是城市的名字,它会自动更新你的ID。

3)如果你想绑定你的数据,模板应该是一样的。你应该把目的地和航班号记在清单上。如果它们没有值,则将它们设置为null。你可以处理null值,而不能处理不存在的属性。
new Flight { DepartureID = 3, DestinationID = null, FlightNumber = null }