Frage

Ich versuche, eine Drop-Down-Liste in einem Repeater zu füllen, aber ich bin nicht sehr erfolgreich. Ich bin wahrscheinlich die falsche EventArgse mit .

Hier ist meine aspx Code:

        <asp:Repeater runat="server" id="criteriaScore">
            <HeaderTemplate>
              <ul>         
                <li class="header"><span class="item">Kriterie</span><span class="value">Poeng</span><span class="description">Beskrivelse</span></li>
            </HeaderTemplate>
            <ItemTemplate>
                <li>
                    <span class="item"> <%# Eval("criteria") %>:</span>
                    <asp:DropDownList id="ddlRating" runat="server" autopostback="true" enableviewstate="false"></asp:DropDownList>
                    <span class="value score<%# Eval("lvl") %>" title="<%# Eval("description") %>"> </span>
                </li>
            </ItemTemplate>
            <FooterTemplate>
                </ul>  
            </FooterTemplate>
        </asp:Repeater>

Und der Code hinter:

    protected void criteriaScore_ItemDataBound(object sender, DataListCommandEventArgs e)
    {
        DropDownList ddl = (DropDownList)e.Item.FindControl("ddlRating");

        for(int i=1; i > 5; i++)
        {
            ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
        }
    }

Kann jemand bitte leite mich auf dem rechten Weg? :)

War es hilfreich?

Lösung

Depsite die anderen Antworten auf diese Frage sollte die ItemDataBound Ereignis nicht Steuerdaten verwendet werden, zu binden, zu tun, dass auf der Steuerungsebene.

Ihre Dropdownlist das Databinding-Ereignis definieren:

<asp:DropDownList runat="server" ID="ddlYourDDL"  OnDataBinding="ddlYourDDL_DataBinding">

Dann das OnDataBinding Ereignis implementieren:

protected void ddlYourDDL_DataBinding(object sender, System.EventArgs e)
{
    DropDownList ddl = (DropDownList)(sender);
    for (int i = 1; i < 5; i++)
    {
         ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
    }

    // Now that the items are all there, set the selected property
    ddl.SelectedValue = Eval("selectedfieldname").ToString();
 }

Sie sollten versuchen und alle Ihre Datenbindung auf der Steuerungsebene statt für Dinge zu suchen, und mit Ihrem Raster darüber wissen, was es enthält. Jede Steuerung kann für sich selbst sorgen;.) Auf diese Weise ist es viel einfacher Kontrollen zu Ihrer Vorlage hinzuzufügen und zu entfernen und halten diese Änderungen isoliert

Andere Tipps

for(int i=1;i > 5;i++)

Soll heißen ...

for(int i=1;i < 5 ;i++)

In der ASPX-Seite:

<asp:Repeater runat="server" id="criteriaScore"   
              OnItemDataBound="criteriaScore_ItemDataBound">

in dem Code-Behind:

protected void criteriaScore_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

    // This event is raised for the header, the footer, separators, and items.

    // Execute the following logic for Items and Alternating Items.
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==   
        ListItemType.AlternatingItem) 
    {
         DropDownList ddl = (DropDownList)e.Item.FindControl("ddlRating");

         for(int i=0; i < 5; i++)
         {
            ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));
         }
    }
 }  

private void criteriaScore_ItemDataBound (Objektquelle, RepeaterCommandEventArgs e)

Unabhängig davon, wie das Verfahren durchgeführt wird (es ein paar Möglichkeiten sind), wird das ItemDataBound Ereignis nicht an den Repeater im Markup angebracht.

Ändern:     for (int i = 1; i> 5; i ++) Zu:     for (int i = 1; i <5; i ++)

Oder:

    using System.Linq;

    ddl.DataSource = Enumerable.Range(1, 5);
    ddl.DataBind();
    ddl.SelectedValue = yourValue
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top