我有来自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论坛上问了这个问题,但没有得到任何答案:(
答案 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()