Databinding of RadioButtonList using SelectedValue

2020-02-05 09:21发布

I am databinding a GridView to an object datasource. The gridview contains a TemplateField which contains a RadioButtonList with ListItems defined inline.
I want to be able to databind the SelectedValue of the RadioButtonList to the same underlying table as the other grid columns, but it doesn't work!

Do I have my syntax wrong, or is this impossible and requires looping code to individually select the proper item in each row?

<llblgenpro:LLBLGenProDataSource ID="llbComputerApplication" DataContainerType="EntityCollection" runat="server"></llblgenpro:LLBLGenProDataSource>
        <asp:GridView ID="gridComputerApps" DataSourceID="llbComputerApplication" runat="server" AutoGenerateColumns="False" 
            EmptyDataText ="NO APPLICATIONS FOUND FOR THIS COMPUTER." 
            DataKeyNames="ComputerID, ApplicationID" EnableViewState="False"
            style="border-style:dotted;border-width:thin"
            >
            <Columns>
                <asp:BoundField DataField="ApplicationID" HeaderText="Application ID" SortExpression="ApplicationID" Visible="True" />
                <asp:TemplateField HeaderText="Application Name"><ItemTemplate><%#Eval("Application.ApplicationName")%></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="Normalized Name"><ItemTemplate><%#Eval("Application.NormalizedAppName")%></ItemTemplate></asp:TemplateField>
                <asp:TemplateField HeaderText="Notes"><ItemTemplate><%#Eval("Application.NormalizedNotes")%></ItemTemplate></asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:RadioButtonList SelectedValue='<%#Eval("RequirementOption")%>' ID="rblRequirementOption" RepeatDirection="Horizontal"  runat="server">
                            <asp:ListItem Value="Need Now" Text="Need Now"></asp:ListItem>
                            <asp:ListItem Value="Need Someday" Text="Need Someday"></asp:ListItem>
                            <asp:ListItem Value="Do Not Need" Text="Do Not Need"></asp:ListItem>
                        </asp:RadioButtonList>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="NormalizedNotes" HeaderText="Notes" Visible="False" />
            </Columns>
        </asp:GridView>

标签: asp.net
4条回答
Ridiculous、
2楼-- · 2020-02-05 09:33

I also experienced this problem (nothing selected in radiobuttonlist) when binding against boolean values in MS SQL:

radDefault.Items.Add(new ListItem("Yes", "true"));
radDefault.Items.Add(new ListItem("No", "false"));

In my case, the solution was to capitalize the first letter of the true/false values, then the radiobuttonlistworked as expected:

radDefault.Items.Add(new ListItem("Yes", "True"));
radDefault.Items.Add(new ListItem("No", "False"));

Or, declaratively:

<asp:RadioButtonList runat="server" ID="radDefault" SelectedValue='<%# Bind("DB_FIELD") %>'>
    <asp:ListItem Value="False" Text="No" />
    <asp:ListItem Value="True" Text="Yes" />
</asp:RadioButtonList>
查看更多
▲ chillily
3楼-- · 2020-02-05 09:41
<asp:RadioButtonList runat="server" ID="MyRbl" SelectedValue='<%# Bind("MyRblField") %>'
    CssClass="NormalTextBox" RepeatDirection="Horizontal">
    <asp:ListItem Value="false" Text="No" />
    <asp:ListItem Value="true" Text="Yes" />
    <asp:ListItem Value="" Text="" selected="true" style="display: none" />
</asp:RadioButtonList>

It work me ..... gnanasekar.s vilangulathur

查看更多
聊天终结者
4楼-- · 2020-02-05 09:49

I didn't like the idea of using css to hide an item. Instead, I found this solution to add a blank item but remove it in the code behind.

<asp:RadioButtonList ID="MyRadioButtonList" runat="server" 
    SelectedValue='<%# Bind("Blah") %>' 
    OnDataBound="MyRadioButtonList_DataBound">
       <asp:ListItem Value=""></asp:ListItem>
       <asp:ListItem Value="A"></asp:ListItem>
       <asp:ListItem Value="B"></asp:ListItem>
       <asp:ListItem Value="C"></asp:ListItem>
 </asp:RadioButtonList>

protected void MyRadioButtonList_DataBound(object sender, EventArgs e)
 {
       RadioButtonList list = (RadioButtonList)sender;
       ListItem blank = list.Items.FindByValue("");
       if (blank != null)
          list.Items.Remove(blank);
 }
查看更多
祖国的老花朵
5楼-- · 2020-02-05 09:51

What you have should work. Are you getting an error? Here's a working example copied from my current project. I'm binding to a nullable bit field - so have a hidden list item to accept the nulls.

<asp:RadioButtonList runat="server" ID="MyRbl" SelectedValue='<%# Bind("MyRblField") %>'
    CssClass="NormalTextBox" RepeatDirection="Horizontal">
    <asp:ListItem Value="false" Text="No" />
    <asp:ListItem Value="true" Text="Yes" />
    <asp:ListItem Value="" Text="" style="display: none" />
</asp:RadioButtonList>
查看更多
登录 后发表回答