2009-09-16 30 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()