2012-06-18 53 views
3

aspx文件:Repeater中的ASP.NET RadioButtonList?

<asp:Repeater ID="Repeater_sorular" runat="server"> 
    <HeaderTemplate> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <div class="div_soru"> 
     <div class="div_soru_wrapper"> 
      <%#Eval("Subject")%> 
      <asp:RadioButtonList ID="RadioButtonList_secenekler" runat="server" Visible='<%# Eval("TypeId").ToString() == "1" %>' 
       DataSource='<%#Eval("Secenekler")%>' DataTextField='<%#Eval("OptionName")%>' DataValueField='<%#Eval("OptionId")%>'> 
      </asp:RadioButtonList> 
      <asp:CheckBoxList ID="CheckBoxList_secenekler" runat="server" Visible='<%# Eval("TypeId").ToString() == "2" %>' 
       DataSource='<%#Eval("Secenekler")%>' DataTextField='<%#Eval("OptionName")%>' DataValueField='<%#Eval("OptionId")%>'> 
      </asp:CheckBoxList> 
     </div> 
     </div> 
    </ItemTemplate> 
    <FooterTemplate> 
    </FooterTemplate> 
</asp:Repeater> 

和代码隐藏:

SpAnketDataContext db = new SpAnketDataContext(); 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindRepeaterSorular(); 
    } 
} 

protected void ImageButton_kaydet_OnCommand(object source, CommandEventArgs e) 
{ 

} 

private void BindRepeaterSorular() 
{ 
    int anket_id = 3; 

    var sorular = from soru in db.TableSurveyQuestions 
        where soru.SurveyId == anket_id 
        select new 
        { 
         soru.TypeId, 
         soru.Subject, 
         soru.QuestionId, 
         soru.SurveyId, 
         soru.QueueNo, 
         SurveyTitle = soru.TableSurvey.Title, 
         TypeName = soru.TableSurveyQuestionType.TypeName, 

         Secenekler = from secenekler in soru.TableSurveyOptions 
            select new 
            { 
             secenekler.OptionId, 
             secenekler.OptionName, 
             secenekler.QuestionId, 
            } 
        }; 

    Repeater_sorular.DataSource = sorular; 
    Repeater_sorular.DataBind(); 
} 

我的问题:

我不能约束datavaluefield和datatextfiled。如果我按照上面的定义书写。我得到了这个错误。

DataBinding: '<>f__AnonymousType1`8[[System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Collections.Generic.IEnumerable`1[[<>f__AnonymousT...' does not contain a property with the name 'OptionName'. 

如何绑定值和文本。

谢谢。

回答

2

错误清楚地解释自己:

does not contain a property with the name 'OptionName' 

只要改变这一点(在这两个,你的RadioButtonList申报和CheckBoxList):

DataTextField='<%#Eval("OptionName")%>' DataValueField='<%#Eval("OptionId")%>' 

要:

DataTextField="OptionName" DataValueField="OptionId" 

而这它,你不需要评估绑定,只需指定th的名称即可e财产。你的代码的其余部分看起来不错

编辑

的要求,从RadioButtonList获得所选择的项目:

<asp:GridView runat="server" OnRowCommand="grdProducts_RowCommand" ID="grdProducts"> 
    <Columns> 
     <asp:TemplateField ShowHeader="False"> 
      <ItemTemplate> 
       <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="false" 
        CommandName="myLink" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' Text="Button"></asp:LinkButton> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:RadioButtonList DataTextField="NestedValue" DataValueField="ID" runat="server" DataSource='<%# Eval("Nested") %>' ID="radios"> 
       </asp:RadioButtonList> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

<asp:Label runat="server" ID="lblMessage" /> 

后面的代码:

protected void grdProducts_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     switch (e.CommandName) 
     { 
      case "myLink": 
       var row = this.grdProducts.Rows[int.Parse(e.CommandArgument.ToString())]; 
       var radios = row.FindControl("radios") as RadioButtonList; 
       this.lblMessage.Text += "<br/>" + radios.UniqueID; 
       this.lblMessage.Text += "<br/> dedede " + radios.SelectedValue; 
       break; 
     } 
    } 
+0

Thansk你的答案它的工作原理。 –

+0

我想问另外一个问题。所以我很高兴能得到这些listitems的价值。你能给我一个关于这个的起点吗?可能是链接或其他等。谢谢。 –

+0

给我一秒我会更新答案 – Jupaol

相关问题