2009-09-16 63 views
0

我有一个DevExpress提供的来自ObjectDataSource的数据的ASPxGridView。我的数据行对象公开了诸如ParameterName,ParameterType和ParameterValue之类的属性。动态更改ASPxGridView的编辑器类型

//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整数,布尔等复选框。

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

回答

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