2012-01-02 79 views
0

我有一個datagridvew與綁定列表,其數據源是交叉表。我有另一個綁定列表,充當查找並綁定到DataGridViewComboBoxColumn類型的列之一。我簡單的綁定列表如下圖所示:基本DataGridView問題

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:文本框
  • 出發:文本框
  • 目的地ID:文本框
  • 目的地:Combobox
  • 航班號:Textbox

我有三個問題:

1)離開是隻讀的。我想顯示身份證和城市。我如何添加文本框來自動查找城市值。我想到了OnCellPainting事件並查找它,但e.Value是隻讀的。是否有一些類似於Delphi的OnCellDrawing事件?

2)在目的地的組合框上,一旦用戶從組合框中選擇一個值,我該如何也更新目的地ID?

3)如何處理的情況下,我只對出發(比如這個記錄(new Flight { DepartureID = 3})拋出一個無效值錯誤,因爲沒有相應的價值組合框查找)

回答

1

1的值)的最簡單方法設置您的出發城市將使用像目的地ComboBox。將其綁定到目標列表並將此列標記爲ReadOnly。這將處理沒有代碼的出發。

2)您應該將您的DataGridView和您的List航班與BindingSource綁定。因爲您的ComboBoxValueMember是您的ID,您的DisplayMember是城市的名稱,它會自動更新您的ID。

3)如果你想綁定你的數據,模板應該是一樣的。您應該始終在列表中包含目的地和航班號。如果他們沒有價值,請將它們設置爲null。您將能夠處理null值,而您無法處理不存在的屬性。
new Flight { DepartureID = 3, DestinationID = null, FlightNumber = null }

+0

感謝您的回覆Gabriel。我希望不要使用只讀組合框,而只使用直接文本框。是否有一個類似於Delphi DBGrid的OnDrawEvent,我可以在那裏查找? – 2012-01-03 14:21:35

+0

您可以隨時通過OnDrawEvent更改控件的查找,但我不熟悉重繪控件。如果你是谷歌的話,我肯定有很多教程。 – 2012-01-03 15:25:39

+0

再次感謝但我沒有看到DataGridView的任何OnDrawEvent。理想情況下,我想OnDrawCellEvent不只是整個網格或列本身。此外,我應該感謝您建議我將Flight.DestinationID設置爲空,因爲它很好地工作。 – 2012-01-03 18:04:30