Похоже, вы не закрываете следующие скобки:
if(isset( Похоже, вы не закрываете следующие скобки:
[110] и
if (!empty( Похоже, вы не закрываете следующие скобки:
[110] и
[111]FILES['fileup']['name'])) {
POST['submission'])) {
и
if (!empty( Похоже, вы не закрываете следующие скобки:
[110] и
[111]FILES['fileup']['name'])) {
Да, можно создать TypeDescriptionProvider для выполнения вложенной привязки. Вот подробный пример из блога MSDN:
public class Manufacturer
{
long Id {get; set;}
String Name {get; set;}
public override string ToString()
{
return Name;
}
}
Переопределение для строкового представления метода.
Если Вы хотите выставить определенные, вложенные свойства как обязательные цели, то ответ 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 к Вашей сетке, указывая "Производителя" как поле данных, и Вы хороши для движения.
Способ, которым я приблизился к этому в недавнем приложении, состоял в том, чтобы создать мои собственные классы 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 к тому, что я хотел на основе значения.
Просто используйте Список и установите DataMember к строке "Производитель. Имя" и если Вы хотите DataKeyField использовать идентификатор автомобиля просто набор это к "идентификатору".
dataGrid.DataSource = carList;
dataGrid.DataMember = "Maker.Name";
dataGrid.DataKeyField = "ID";
dataGrid.DataBind();
я знаю что работы в управлении повторителя, по крайней мере...
Я предполагаю, что вы можете сделать следующее:
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;}
}