我有一个带有绑定列表的datagridvew,其数据源是交集表。我有另一个绑定列表,它充当查找并绑定到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中有五列:
我有三个问题:
1)离开是只读的。我想显示身份证和城市。如何添加文本框以自动查找City值。我想到了OnCellPainting事件并查找它,但e.Value是只读的。是否存在类似于Delphi的OnCellDrawing事件。
2)在Destinations的组合框中,一旦用户从组合框中选择一个值,我该如何更新目的地ID呢?
3)如何处理我只有离开值的场景(例如,此记录(new Flight { DepartureID = 3}
)会抛出无效值错误,因为组合框没有值可供查找)
答案 0 :(得分:1)
1)设置出发城市的最简单方法是使用ComboBox
作为目的地。将其绑定到“目标”列表并将此列标记为ReadOnly
。这将在没有代码的情况下处理出发。
2)您应该使用DataGridView
绑定List
和BindingSource
个航班。由于您的ComboBox
ValueMember
是您的ID,而DisplayMember
是该城市的名称,因此会自动更新您的ID。
3)如果要绑定数据,模板应该是相同的。您应该始终在列表中有目的地和航班号。如果它们没有价值,请将它们设置为null
。当您无法处理不存在的属性时,您将能够处理null
值
new Flight { DepartureID = 3, DestinationID = null, FlightNumber = null }