Основные вопросы DataGridView - PullRequest
0 голосов
/ 03 января 2012

У меня есть цепочка данных с списком привязок, источник данных которого находится в таблице пересечений. У меня есть другой список связывания, который действует как поиск и привязан к одному из столбцов, который является типом 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"}
};

У меня есть пять столбцов в моей таблице данных:

  • Идентификатор отправления: текстовое поле
  • Отправление: текстовое поле
  • ID пункта назначения: текстовое поле
  • Назначение: Combobox
  • Номер рейса: текстовое поле

У меня три вопроса:

1) Отправление только для чтения. Я хотел бы показать ID и город. Как я могу добавить текстовое поле для автоматического поиска значения города. Я думал о событии OnCellPainting и искал его, но значение e.Value доступно только для чтения. Есть ли какое-нибудь событие OnCellDrawing, похожее на Delphi.

2) Как в ящике со списком для адресатов, когда пользователь выбирает значение из списка, как мне также обновить идентификатор получателя?

3) Как мне обработать сценарий, в котором у меня есть только значения для отправления (например, эта запись (new Flight { DepartureID = 3}) выдает ошибку недопустимого значения, потому что для поиска в выпадающем списке нет значения)

1 Ответ

1 голос
/ 03 января 2012

1) Самый простой способ установить город отправления - использовать ComboBox как пункт назначения. Привязать его к списку адресатов и пометить этот столбец как ReadOnly. Это будет обрабатывать выезд без кода.

2) Вы должны связать свои DataGridView и свои List рейсов с BindingSource. Поскольку ваш ComboBox ValueMember является вашим идентификатором, а DisplayMember - названием города, он автоматически обновит ваш идентификатор.

3) Если вы хотите связать свои данные, шаблон должен быть таким же. У вас всегда должен быть пункт назначения и номер рейса в вашем списке. Если они не имеют значения, установите их на null. Вы сможете обрабатывать значение null, в то время как вы не сможете обработать несуществующий атрибут.
new Flight { DepartureID = 3, DestinationID = null, FlightNumber = null }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...