3

aspxファイル:

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

値とテキストをバインドするにはどうすればよいですか。

ありがとう。

4

1 に答える 1

2

エラーはそれ自体を明確に説明しています。

does not contain a property with the name 'OptionName'

これを変更するだけです(との宣言の両方でRadioButtonListCheckBoxList

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

に:

DataTextField="OptionName" DataValueField="OptionId"

これで、バインディングを評価する必要はなく、プロパティの名前を指定するだけです。コードの残りの部分は良さそうです

編集済み

要求に応じて、選択したアイテムを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;
        }
    }
于 2012-06-18T06:12:14.167 に答える