2009-06-26 9 views
8

Estoy enlazando un GridView a un origen de datos de objeto. La vista de cuadrícula contiene un TemplateField que contiene RadioButtonList con ListItems definidos en línea.
Quiero ser capaz de enlazar datos del SelectedValue de RadioButtonList con la misma tabla subyacente que las otras columnas de la grilla, pero no funciona.Enlace de datos de RadioButtonList utilizando SelectedValue ... posible?

¿Tengo mi sintaxis incorrecta, o esto es imposible y requiere un código de bucle para seleccionar individualmente el elemento adecuado en cada fila?

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

Respuesta

18

Lo que debe funcionar. ¿Estás obteniendo un error? Aquí hay un ejemplo de trabajo copiado de mi proyecto actual. Me estoy vinculando a un campo de bits que admite valores nulos, así que tenga un elemento de lista oculto para aceptar los nulos.

<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> 
+0

He intentado de varias maneras ... ¡la versión particular que publiqué ni siquiera representa el GridView en absoluto! Mientras que si lo elimino, todas las filas se procesan, pero no se seleccionan (aunque tengan filas en la base de datos (que coincidan con ListItem.Value) – tbone

+0

¿recibe un error? –

+0

No, no hay ningún error. Estoy usando Evaluar en lugar de Bind como eres ... Estoy seguro de que intenté también vincular. Pero esto * debería * funcionar, ¿verdad? ¿Estás vinculando MyRbl al origen de datos subyacente a tu cuadrícula de datos? – tbone

4

También experimentaron este problema (nada seleccionado en RadioButtonList) cuando se unen contra los valores booleanos en MS SQL:

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

En mi caso, la solución fue mayúscula la primera letra de la verdad/falsos valores, entonces el radiobuttonlistworked como se esperaba:

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

O, de forma declarativa:

<asp:RadioButtonList runat="server" ID="radDefault" SelectedValue='<%# Bind("DB_FIELD") %>'> 
    <asp:ListItem Value="False" Text="No" /> 
    <asp:ListItem Value="True" Text="Yes" /> 
</asp:RadioButtonList> 
+1

Sé que esta publicación es antigua, pero solo quería comentar que la carcasa sí importa. Esto también lo solucionó para mí. Gracias – ConditionRacer

0
<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> 

Me funciona ..... gnanasekar.s vilangulathur

1

No me gustaba la idea de utilizar CSS para ocultar un elemento. En su lugar, encontré this solution para agregar un elemento en blanco pero lo eliminé en el código de detrás.

<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); 
} 
Cuestiones relacionadas