문제

반복기 내부에 드롭다운 목록을 채우려고 하는데 성공하지 못합니다.아마 잘못 사용하고 있는 것 같아요 EventArgs e.

내 aspx 코드는 다음과 같습니다.

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

그리고 뒤에 있는 코드는 다음과 같습니다.

    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()));
        }
    }

누군가 나를 올바른 길로 안내해 줄 수 있습니까?:)

도움이 되었습니까?

해결책

이 질문에 대한 다른 답변에도 불구하고 ItemDataBound 이벤트는 컨트롤 데이터를 바인딩하는 데 사용되어서는 안 되며 컨트롤 수준에서 수행해야 합니다.

드롭다운 목록에서 데이터 바인딩 이벤트를 정의합니다.

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

그런 다음 OnDataBinding 이벤트를 구현합니다.

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();
 }

당신은 시도하고해야합니다 모두 사물을 검색하고 그리드에 포함된 내용을 알아야 하는 대신 컨트롤 수준에서 데이터 바인딩을 수행합니다.각 컨트롤은 스스로 관리할 수 있습니다. ;) 이렇게 하면 템플릿에 컨트롤을 추가 및 제거하고 이러한 변경 사항을 격리된 상태로 유지하는 것이 훨씬 쉽습니다.

다른 팁

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

읽어야합니다 ...

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

.aspx 페이지에서 :

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

코드-홀드에서 :

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()));
         }
    }
 }  

개인 void critiascore_itemDatabound (객체 소스, RepeaterCommandeventArgs e)

방법이 구현되는 방법에 관계없이 (몇 가지 방법이 있음) ItemDatabound 이벤트는 마크 업의 리피터에 첨부되지 않습니다.

변경 : for (int i = 1; i> 5; i ++) to : for (int i = 1; i <5; i ++)

또는:

    using System.Linq;

    ddl.DataSource = Enumerable.Range(1, 5);
    ddl.DataBind();
    ddl.SelectedValue = yourValue
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top