2

このようなマークアップを持つSitecoreSheerUIウィザードを作成しています

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

しかし、横のコードでコンボボックス「ブランド」にオプションを追加する方法が見つからないようです。以下のコードを完成させる方法を知っている人はいますか?

[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
        }
    }

}
4

3 に答える 3

7

まず、Sitecore.Web.UI.HtmlControls の Sitecore Combobox を使用していると思いますか (たとえば、Telerik コントロールではありません)。

Reflector を見ると、次のようになります。

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

したがって、brandsInSqlDb を介してループを構築し、ListItem をインスタンス化して Brands Combobox.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);
}
于 2013-03-07T12:48:02.107 に答える
1

小文字のB (ComboBox ではなく Combobox) にする必要があります。完全な名前空間は次のとおりです。

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;
于 2013-03-07T13:44:49.273 に答える
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);
}
于 2013-03-08T20:08:20.347 に答える