Привязка к DataGridView, поэтому каждая ячейка является связанным объектом, а не каждой строкой - PullRequest
2 голосов
/ 10 ноября 2009

Я пытаюсь настроить DataGridView для представления страницы из книги карт. Каждая ячейка в сетке представляет объект MapGrid. Пользователи будут использовать это, чтобы установить маршрут для MapGrids.

public class MapGrid
{
    public int ID { get; set; }
    public short PageNumber { get; set; }
    public char ColumnNumber { get; set; }
    public byte RowNumber { get; set; }
    public RouteSummary Route { get; set; }
}  

public class RouteSummary
{
    public int ID { get; set; }
    public byte RouteNumber { get; set; }
}

Мне интересно, могу ли я использовать привязку данных для привязки моего списка объектов MapGrid к сетке. Я хотел бы сделать что-то вроде этого:

List<MapGrid> mapGrids = GetMapGrids();
dataGridView.DataSource = mapGrids;

И я бы хотел, чтобы dataGridView отображал свойство MapGrid.RouteSummary.RouteNumber.

Я подумал, что, может быть, мне удастся создать ILookup<byte, MapGrid> для группировки MapGrids по строкам. Тогда, возможно, я мог бы связать это с DataGridView. Я не уверен, как бы я сказал, чтобы отобразить RouteNumber, хотя.

Если бы число столбцов было постоянным, я мог бы просто создать объект со свойством для каждого столбца и связать их список с DataGridView. Но, конечно, все не так просто. Количество столбцов не является постоянным. Поэтому я не понимаю, как это могло бы работать.

Есть идеи? Я пытаюсь сделать что-то за рамками привязки данных? Прямо сейчас я думаю, что мне придется вручную заполнить DataGridView объектами MapGrid и использовать событие CellValueChanged для обновления содержимого.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

Я пришел к выводу, что то, что я хотел сделать, нельзя сделать с помощью свойства DataGridView.DataSource. В конце я использовал циклы for, чтобы вручную добавить столбцы и строки в DataGridView.

0 голосов
/ 28 ноября 2009

Зачем беспокоиться о дополнительном классе? Можно также определить вашу MapGrid как

public class MapGrid
{
    public int ID { get; set; }
    public short PageNumber { get; set; }
    public char ColumnNumber { get; set; }
    public byte RowNumber { get; set; }
    public int RouteID { get; set; }
    public byte RouteNumber { get; set; }
}

Затем вы можете использовать простую привязку, как пожелаете.

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