2013-03-07 128 views
1

我創建具有類似這樣的標記添加項目Sitecore的組合框

<WizardFormIndent> 
    <GridPanel ID="FieldsAction" Columns="2" Width="100%" CellPadding="2"> 
     <Literal Text="Brand:" GridPanel.NoWrap="true" Width="100%" /> 
     <Combobox ID="Brand" GridPanel.Width="100%" Width="100%"> 
     <!-- Leave empty as I want to populate available options in code --> 
     </Combobox> 
    <!-- Etc. --> 
</WizardFormIndent> 

一個Sitecore的純粹的UI嚮導,但我似乎無法找到一種方法來在代碼中添加選項組合框「品牌」的旁邊。有誰知道如何完成下面的代碼?

[Serializable] 
public class MySitecorePage : WizardForm 
{ 
    // Filled in by the sheer UI framework 
    protected ComboBox Brands; 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     if (!Context.ClientPage.IsEvent) 
     { 
      IEnumerable<Brand> brandsInSqlDb = GetBrands(); 

      // this.Brands doesn't seem to have any methods 
      // to add options 
     } 
    } 

} 

回答

6

首先,我假設你正在使用的Sitecore的組合框從Sitecore.Web.UI.HtmlControls(而不是Telerik的控制實例)?

展望反射器,它最終會做這樣的事情:

foreach (Control control in this.Controls) 
{ 
    if (control is ListItem) 
    { 
     list.Add(control); 
    } 
} 

所以我希望你們需要透過brandsInSqlDb建立一個循環,實例化一個列表項,並把它添加到你的品牌組合框.Something像

foreach (var brand in brandsInSqlDb) 
{ 
    var item = new ListItem(); 
    item.Header = brand.Name; // Set the text 
    item.Value = brand.Value; // Set the value 

    Brands.Controls.Add(item); 
} 
+0

謝謝,這個工作很完美 – 2013-03-07 13:55:01

1

它應該是小寫(組合框不組合框)。完整的命名空間是:

protected Sitecore.Web.UI.HtmlControls.Combobox Brands; 

那麼你可以添加選項,如:

ListItem listItem = new ListItem(); 
this.Brands.Controls.Add((System.Web.UI.Control) listItem); 
listItem.ID = Sitecore.Web.UI.HtmlControls.Control.GetUniqueID("ListItem"); 
listItem.Header = name; 
listItem.Value = name; 
listItem.Selected = name == selectedName; 
0

的方式我做到這一點是第一次訪問網頁中的Combo框:

ComboBox comboBox = Page.Controls.FindControl("idOfYourComboBox") as ComboBox 

現在您可以訪問您在頁面中定義的控件。現在你所要做的就是給它賦值:

foreach (var brand in brandsInSqlDb) 
{ 
    comboBox .Header = brand.Name; // Set the text 
    comboBox .Value = brand.Value; // Set the value 
    Brands.Controls.Add(item); 
}