C # Tutorial - Привязка DataGridView к коллекции, которая содержит объект - PullRequest
1 голос
/ 03 декабря 2009

Итак, у меня есть обзор данных.

Обычно я могу создать список связывания моего объекта, и он будет правильно отображать все данные и столбцы

* 1005 например *

BindingList<Customer> CustomerList = new BindingList<Customer>();
myDataGridView.DataSource = CustomerList;

И он будет отображать столбец для каждого свойства в Customer, у которого есть геттер. Также будет отображаться строка для каждого объекта.

Отличный результат.

Теперь в моем текущем сценарии у меня есть следующие объекты:

public class Reservedele
{
    public int Rnr { get; private set;}
    public string Navn { get; private set;}
    public double Pris { get; private set;}
    public string Type { get; private set;}

    public Reservedele(int rnr, string navn, double pris, string type)
    {
        Rnr = rnr;
        Navn = navn;
        Pris = pris;
        Type = type;
    }
}
public class IndkøbsKurvReservedele
{
    public Reservedele Reservedel  { get; private set;}
    public int Antal { get; private set; }
    public double Pris { get; private set; }

    public IndkøbsKurvReservedele(Reservedele reservedel, int antal, double pris)
    {
        Reservedel = reservedel;
        Antal = antal;
        Pris = pris;
    }
}

Так что, если я сделаю это:

BindingList<IndkøbsKurvReservedele> ReserveDeleListeIndKøbsKurv = new BindingList<IndkøbsKurvReservedele>();
myDataGridView.DataSource = ReserveDeleListeIndKøbsKurv;

Это не сработает :( Ошибка в том, что в datagridview отображается:

  • Сам объект
  • Количество людей
  • Цена

Пример: alt text

Как я могу указать, что представление данных должно иметь свойства из Reservedel, за которыми следуют свойства в IndkøbsKurvReservedele в качестве заголовков ??

Для справки, Reservedel означает «запасные части», а IndkøbsKurvReservedel означает что-то вроде «ShoppingBasketOfSpareParts». Антал означает «количество», как и во сколько существует. Извините за присвоение имен внешним переменным.

РЕДАКТИРОВАТЬ: У меня есть еще один вопрос: Как я могу сделать свойство Rnr не отображаться в виде столбца?

Ответы [ 5 ]

2 голосов
/ 03 декабря 2009

Технически это невозможно, источник данных не связывает вложенные свойства.

Но вы всегда можете обойти эту проблему, выставив свойства вашего дочернего объекта в родительском.

1 голос
/ 03 декабря 2009

Вы всегда можете использовать LINQ и сделать что-то вроде:

var bindMe =
            from r in ReserveDeleListeIndKøbsKurv
            select new
            {
                navn = r.Reservedel.Navn,
        pris = r.Reservedel.Pris,
        type = r.Reservedel.Type,
        antal = r.Antal,
        anotherPris = r.Pris
            };

myDataGridView.DataSource = bindMe;

1 голос
/ 03 декабря 2009

Вы также можете переопределить метод ToString () класса Reservedele, чтобы отобразить все, что вы хотите (по умолчанию DataGridView вызовет метод ToString () для получения содержимого ячейки).

0 голосов
/ 03 декабря 2009

Это мое решение:

public class IndkøbsKurvReservedele
{
    //public Reservedele Reservedel  { get; private set;}
    private int Rnr;
    public string Navn { get; private set; }
    public double Pris { get; private set; }
    public string Type { get; private set; }
    public int Antal { get; private set; }
    public double SPris { get; private set; }

    public IndkøbsKurvReservedele(Reservedele reservedel, int antal, double sPris)
    {
        Rnr = reservedel.Rnr;
        Navn = reservedel.Navn;
        Pris = reservedel.Pris;
        Type = reservedel.Type;
        Antal = antal;
        SPris = sPris;
    }
    public int HenrReservedelsNummer()
    {
        return Rnr;
    }
}

Если кто-то создает лучше. Я приму их вместо.

0 голосов
/ 03 декабря 2009

Вы не можете, если вы не унаследуете этот класс или не обернете все эти данные в какой-то набор данных. Я не знаю отношения ваших классов или как они сочетаются друг с другом. С текущей публикацией, которую вы нам дали, это невозможно.

Кроме того, как ты смеешь создавать переменные как иностранные слова! :) шучу

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