基本的DataGridView问题

时间:2012-01-02 22:31:22

标签: c# winforms datagridview

我有一个带有绑定列表的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中有五列:

  • Depature ID:Textbox
  • 出发:文本框
  • 目的地ID:文本框
  • 目的地:Combobox
  • 航班号:文本框

我有三个问题:

1)离开是只读的。我想显示身份证和城市。如何添加文本框以自动查找City值。我想到了OnCellPainting事件并查找它,但e.Value是只读的。是否存在类似于Delphi的OnCellDrawing事件。

2)在Destinations的组合框中,一旦用户从组合框中选择一个值,我该如何更新目的地ID呢?

3)如何处理我只有离开值的场景(例如,此记录(new Flight { DepartureID = 3})会抛出无效值错误,因为组合框没有值可供查找)

1 个答案:

答案 0 :(得分:1)

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

2)您应该使用DataGridView绑定ListBindingSource个航班。由于您的ComboBox ValueMember是您的ID,而DisplayMember是该城市的名称,因此会自动更新您的ID。

3)如果要绑定数据,模板应该是相同的。您应该始终在列表中有目的地和航班号。如果它们没有价值,请将它们设置为null。当您无法处理不存在的属性时,您将能够处理nullnew Flight { DepartureID = 3, DestinationID = null, FlightNumber = null }