Repeater 내부에 DropDownList 채우기가 작동하지 않습니다.
-
07-07-2019 - |
문제
반복기 내부에 드롭다운 목록을 채우려고 하는데 성공하지 못합니다.아마 잘못 사용하고 있는 것 같아요 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
제휴하지 않습니다 StackOverflow