Динамическое изменение типа редактора для ASPxGridView - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть ASPxGridView от DevExpress, снабженный данными из ObjectDataSource. Мои объекты строки данных предоставляют такие свойства, как ParameterName, ParameterType и ParameterValue.

//Properties, constructor and private fields code omitted for clarity
public class InputParameterDescription
{
   public string ParameterName;

   public Type ParameterType;

   public int ParameterPrecision;

   public string ParameterDescription;
}

ParameterValue всегда является объектом типа, указанного свойством ParameterType. На самом деле, я использую несколько типов - Int32, Double, String или Boolean. Когда я отображаю значения в сетке и пользователь нажимает «Изменить», ParameterValue всегда редактируется с помощью TextBox. Можно ли изменить редактор для этого столбца в соответствии с ParameterType? Я хочу, чтобы мои пользователи использовали SpinEdit для целых чисел, флажок для логического значения и т. Д.

Фактически, именно так люди работают с сетями DevExpress Delphi - TdxGrid и TcxGrid (событие OnGetProperties). Я задал этот вопрос на форуме DevExpress, но не получил никакого ответа: (

1 Ответ

0 голосов
/ 13 октября 2009

Вы можете создать шаблон для этого столбца, который сделает переключение для вас. Что-то вроде:

public class SwitchTemplate : ITemplate
{
   public void Instantiate(Control container)
   {
      GridViewDataItemTemplateContainer cnt = (GridViewDataItemTemplateContainer) container;
      switch( GetStringParameterTypeFromDataItem(cnt.DataItem) )
      {
         case "Int32":
            container.Controls.Add( new ASPxSpinEdit() { ... } );
            break;

         case "DateTime":
            container.Controls.Add( new ASPxDateEdit() { ... } );
            break;

         case "String":
            container.Controls.Add( new ASPxTextBox() { ... } );
            break;

         ...
      }  
   }
}

Тогда вам просто нужно указать этот шаблон в качестве EditItemTemplate столбца:

myGrid.Columns["MyColumnName"].EditItemTemplate = new SwitchTemplate()
...