2013-03-05 47 views
0

我想在具有Repeater控件的asp.net中構建一個poll系統,DB中有2個表(Polls,PollItems)。並使用此代碼選擇投票:在asp.net中使用Repeater控件構建poll系統

var lstPoll = (from P in Conn.Polls.ToList() 
          orderby P.PollOrder 
          select new { P.Question, P.PollID, P.PollItems }).ToList(); 

RepeaterPoll.DataSource = lstPoll.ToList(); 
RepeaterPoll.DataBind(); 

PollItems表(P.PollItems)具有PollItemIDPollAnswer parametr。

<asp:Repeater ID="RepeaterPoll" runat="server"> 
    <ItemTemplate> 
    <%# Eval("Question")%> 
    <br /> 
    <asp:RadioButtonList ID="rblItemPoll" runat="server" DataValueField='<%# Eval("PollItemID")%>' DataTextField='<%# Eval("PollAnswer")%>'></asp:RadioButtonList> 
    <br /><br /> 
    </ItemTemplate> 
    </asp:Repeater> 

但不是Eval PollAnswer和PollItemID到rblItemPoll。

plase幫助我建立投票系統。

+0

數據集中的屬性「PollItemID」和「PollAnswer」在哪裏?您正在選擇'new {P.Question,P.PollID,P.PollItems}'。 – mellamokb 2013-03-05 21:04:33

+0

pollItems是表,並且具有PollItemID,PollAnswer,... – 2013-03-05 21:07:10

+0

RadioButtonList的數據源在哪裏? – mellamokb 2013-03-05 21:13:50

回答

2

嘗試這種情況:

1 - 定義RepeaterRadioButtonList控制並指定一個OnItemDataBound事件處理程序:

<asp:Repeater ID="RepeaterPoll" runat="server" OnItemDataBound="RepeaterPoll_OnItemDataBound"> 
    <ItemTemplate> 
     <%# Eval("Question")%> 
     <br /> 
     <asp:RadioButtonList ID="rblItemPoll" runat="server" /> 
     <br /><br /> 
    </ItemTemplate> 
</asp:Repeater> 

2-實施你上OnItemDataBound事件數據綁定的RadioButtonList的邏輯:

protected void RepeaterPoll_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     dynamic item = e.Item.DataItem; 
     RadioButtonList list = (RadioButtonList)e.Item.FindControl("rblItemPoll"); 
     list.DataValueField = "PollItemId"; 
     list.DataTextField = "PollItemDescription"; 
     list.DataSource = item.PollItems; 
     list.DataBind(); 
    } 
} 

您可以直接在RadioButtonList標籤上定義DataValueFieldDataTextField屬性。

此外,我檢索DataItemdynamic,因爲您正在爲您的LINQ查詢結果創建一個匿名類型。