Действительно ли возможно связать свойства составного типа с datagrid?

Похоже, вы не закрываете следующие скобки:

if(isset(

Похоже, вы не закрываете следующие скобки:

[110]

и

if (!empty(

Похоже, вы не закрываете следующие скобки:

[110]

и

[111]FILES['fileup']['name'])) {
POST['submission'])) {

и

if (!empty(

Похоже, вы не закрываете следующие скобки:

[110]

и

[111]FILES['fileup']['name'])) {
19
задан Jakub Šturc 23 September 2008 в 14:24
поделиться

6 ответов

Да, можно создать TypeDescriptionProvider для выполнения вложенной привязки. Вот подробный пример из блога MSDN:

http://blogs.msdn.com/msdnts/archive/2007/01/19/how-to-bind-a-datagridview-column-to-a-second-level-property-of-a-data-source.aspx

12
ответ дан 30 November 2019 в 02:18
поделиться
    public class Manufacturer
    {
       long Id {get; set;}
       String Name {get; set;}

       public override string ToString()
       {
          return Name;
       }
    }

Переопределение для строкового представления метода.

5
ответ дан 30 November 2019 в 02:18
поделиться

Если Вы хотите выставить определенные, вложенные свойства как обязательные цели, то ответ Ben Hoffstein ( http://blogs.msdn.com/msdnts/archive/2007/01/19/how-to-bind-a-datagridview-column-to-a-second-level-property-of-a-data-source.aspx ) довольно хорош. Статья, на которую ссылаются, является немного тупой, но она работает.

, Если Вы просто хотите связать столбец со сложным свойством (например, Производитель) и переопределить логику рендеринга, затем или сделать то, что ManiacXZ рекомендовали, или просто разделяют BoundField на подклассы и обеспечивают пользовательскую реализацию FormatDataValue (). Это подобно переопределению ToString (); Вы получаете ссылку на объект, и Вы возвращаете строку, которую Вы хотите отображенный в Вашей сетке.

Что-то вроде этого:

public class ManufacturerField : BoundField
{
    protected override string FormatDataValue(object dataValue, bool encode)
    {
        var mfr = dataValue as Manufacturer;

        if (mfr != null)
        {
            return mfr.Name + " (ID " + mfr.Id + ")";
        }
        else
        {
            return base.FormatDataValue(dataValue, encode);
        }
    }
}

Просто добавляют ManufacturerField к Вашей сетке, указывая "Производителя" как поле данных, и Вы хороши для движения.

2
ответ дан 30 November 2019 в 02:18
поделиться

Способ, которым я приблизился к этому в недавнем приложении, состоял в том, чтобы создать мои собственные классы DataGridViewColumn и DataGridViewCell, наследовавшиеся прочь одного из существующих, таких как DataGridViewTextBoxColumn и DataGridViewTextBoxCell.

В зависимости от типа ячейки Вы хотите, Вы могли использовать других, таких как Кнопка, Флажок, ComboBox, и т.д. Просто смотреть на типы, доступные в Системе. Windows. Формы.

ячейки имеют дело со своим значением как объекты, таким образом, Вы сможете передать свой Автомобильный класс в значение ячейки.

Переопределяющий SetValue и GetValue позволят Вам иметь любую дополнительную логику, необходимо обработать значение.

, Например:

public class CarCell : System.Windows.Forms.DataGridViewTextBoxCell
{
    protected override object GetValue(int rowIndex)
    {
        Car car = base.GetValue(rowIndex) as Car;
        if (car != null)
        {
            return car.Maker.Name;
        }
        else
        {
            return "";
        }
    }
}

На столбце классифицируют главное, которое необходимо сделать, установлен CellTemplate на пользовательский класс ячейки.

public class CarColumn : System.Windows.Forms.DataGridViewTextBoxColumn
{
    public CarColumn(): base()
    {
        CarCell c = new CarCell();
        base.CellTemplate = c;
    }
}

При помощи их пользовательский столбец / Ячейки на DataGridView это позволяет Вам добавлять большую дополнительную функциональность к Вашему DataGridView.

я использовал их для изменения отображенного форматирования путем переопределения GetFormattedValue для применения пользовательского форматирования к строковым значениям.

я также сделал переопределение на Краске так, чтобы я мог сделать пользовательскую ячейку, выделяющуюся в зависимости от условий значения, изменив Стиль ячеек. BackColor к тому, что я хотел на основе значения.

7
ответ дан 30 November 2019 в 02:18
поделиться

Просто используйте Список и установите DataMember к строке "Производитель. Имя" и если Вы хотите DataKeyField использовать идентификатор автомобиля просто набор это к "идентификатору".

dataGrid.DataSource = carList;
dataGrid.DataMember = "Maker.Name";
dataGrid.DataKeyField = "ID";
dataGrid.DataBind();

я знаю что работы в управлении повторителя, по крайней мере...

2
ответ дан 30 November 2019 в 02:18
поделиться

Я предполагаю, что вы можете сделать следующее:

public class Car
{
    public long Id {get; set;}
    public Manufacturer Maker {private get; set;}

    public string ManufacturerName
    {
       get { return Maker != null ? Maker.Name : ""; }
    }
}

public class Manufacturer
{
   long Id {get; set;}
   String Name {get; set;}
}
1
ответ дан 30 November 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: