0

我有一个来自 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 用于整数,将复选框用于布尔值等。

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

4

1 回答 1

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()
于 2009-10-13T07:45:34.293 回答