动态更改ASPxGridView的编辑器类型

时间:2009-09-16 18:20:54

标签: asp.net editor devexpress aspxgridview web-controls

我有来自DevExpress的ASPxGridView,它来自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。当我在网格中显示值并且用户单击“编辑”时,始终使用TextBox编辑ParameterValue。是否可以根据ParameterType更改此列的编辑器?我希望我的用户使用SpinEdit作为整数,使用Boolean复选框等等。

事实上,这是人们使用DevExpress Delphi网格的方式--TdxGrid和TcxGrid(OnGetProperties事件)。我在DevExpress论坛上问了这个问题,但没有得到任何答案:(

1 个答案:

答案 0 :(得分:0)

您可以在该列上创建一个可以为您切换的模板。类似的东西:

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()