none
RadioButton dentro de repeater RRS feed

  • Pregunta

  • Hola expertos, mi consulta es la siguiente:

    Estos trabajando en un cuestionario de pregunta y respuestas y cada pregunta tiene asociada 4 respuestas entre ellas la correcta, utilizo un repeater para editarlas, las respuestas correctas se marcan con  un radiobutton, no puedo lograr que al editarlas se pueda seleccionar solo 1 de las 4 respuestas posibles

    intente con  groupname y no funciona,

    este es parte del codigo:

    Gracias de antemano

     <asp:Repeater ID="RepeaterPregunta" runat="server" OnItemDataBound="RepeaterPregunta_ItemDataBound" >
         <ItemTemplate>
         <table>
            <tr>
            <td>Pregunta:
            </td>
            <td>
                <asp:Label ID="Label1" runat="server" Text='<%#Eval("IdPregunta") %>' Visible="False"></asp:Label>
               
                &nbsp;<asp:TextBox ID="txt_pregunta" runat="server" Text='<%#Eval("Descripcion")%>' Width="400px" TextMode="MultiLine"></asp:TextBox>
                
             </td>
            
           </tr>
           <tr><td>Respuestas:</td></tr>
          
             <asp:Repeater ID="RepeaterRespuestas" runat="server">
             <ItemTemplate>
        
         <tr>
             <td >
                 <asp:RadioButton ID="rbt_Respuestas" runat="server" GroupName="rbt_listaRespuestas" Checked='<%# Eval("Correcta") %>' />
             </td>
             <td>
                     <asp:TextBox ID="txt_A" runat="server" Width="400px" Text='<%#Eval("Descripcion")%>'></asp:TextBox>
            </td>
        </tr>
    
                
              </ItemTemplate>
             </asp:Repeater>
             </table>
         </ItemTemplate>
      </asp:Repeater>

    Codigo del servidor:

      protected void RepeaterPregunta_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
    
                         
                    Repeater rp = e.Item.FindControl("RepeaterRespuestas") as Repeater;
                    TextBox txt = e.Item.FindControl("Txt_A") as TextBox;
                    Label l = e.Item.FindControl("Label1") as Label;
                    int idPregunta = Convert.ToInt32(l.Text);
                    
                   
                    foreach (RepeaterItem item in rp.Items)
                    {
                      RadioButton  control= e.Item.FindControl("rbtl_Respuestas") as RadioButton;
                        
                        
                    }
                     
                    if (rp !=null) {
    
                        var ListaRespuestas = from p in dc.Respuestas where p.IdPregunta == idPregunta select p;
                        rp.DataSource = ListaRespuestas;
                        rp.DataBind();
                    }
                }
            }


    • Editado DiegoReta martes, 11 de septiembre de 2012 16:09
    martes, 11 de septiembre de 2012 15:33

Respuestas

  • mira la idea es la siguiente:

    cambia este código

    <asp:Repeater ID="RepeaterRespuestas" runat="server">
            
    <ItemTemplate>
       
        
    <tr>
            
    <td >
                 <asp:RadioButton ID="rbt_Respuestas" runat="server" GroupName="rbt_listaRespuestas" Checked='
    <%# Eval("Correcta") %>' />
            
    </td>
            
    <td>
                     <asp:TextBox ID="txt_A" runat="server" Width="400px" Text='
    <%#Eval("Descripcion")%>'></asp:TextBox>
           
    </td>
       
    </tr>

               
             
    </ItemTemplate>
            
    </asp:Repeater>

    por un radibuttonlist mas o menos asi:

    <asp:RadioButtonList ID="RadioButtonList1" runat="server" ></asp:RadioButtonList>

    y en el codebehind  en vez de hacerlo de esta forma:

      protected void RepeaterPregunta_ItemDataBound(object sender, RepeaterItemEventArgs e)
           
    {
               
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
               
    {

                        
                   
    Repeater rp = e.Item.FindControl("RepeaterRespuestas") as Repeater;
                   
    TextBox txt = e.Item.FindControl("Txt_A") as TextBox;
                   
    Label l = e.Item.FindControl("Label1") as Label;
                   
    int idPregunta = Convert.ToInt32(l.Text);
                   
                  
                   
    foreach (RepeaterItem item in rp.Items)
                   
    {
                     
    RadioButton  control= e.Item.FindControl("rbtl_Respuestas") as RadioButton;
                       
                       
                   
    }
                    
                   
    if (rp !=null) {

                       
    var ListaRespuestas = from p in dc.Respuestas where p.IdPregunta == idPregunta select p;
                        rp
    .DataSource = ListaRespuestas;
                        rp
    .DataBind();
                   
    }
               
    }
           
    }

    cámbialo por:

      protected void RepeaterPregunta_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
    
                         
                    Repeater rp = e.Item.FindControl("RepeaterRespuestas") as Repeater;
                    TextBox txt = e.Item.FindControl("Txt_A") as TextBox;
                    Label l = e.Item.FindControl("Label1") as Label;
                    int idPregunta = Convert.ToInt32(l.Text);
                    
                   
                    foreach (RepeaterItem item in rp.Items)
                    {
                      RadioButton  control= e.Item.FindControl("rbtl_Respuestas") as RadioButton;
                        
                        
                    }
                     
                    if (rp !=null) {
    
                        var ListaRespuestas = from p in  dc.Respuestas where p.IdPregunta == idPregunta select p;
                        RadioButtonList1.DataSource = ListaRespuestas;
                RadioButtonList1.DataTextField = "Descripcion"
                RadioButtonList1.DataValueField = "IdRespuesta"
                        RadioButtonList1.DataBind();
                    }
                }
            }

    y en este caso el radiobutton list le crea la lista de respuestas con la opcion de radiobutton para que pueda seleccionar solo una, y si ncesita una pregunta con respuestas multiples cambie el radiobutton list por un chekboxlist.

    Espero le sirva.

    Saludos


    Robinson Moscoso Pérez
    [BogotaDotNet.org]
    Bogotá - Colombia
    ------------------
    Si la respuesta te ha ayudado, márcala.

    martes, 11 de septiembre de 2012 18:57
  • no puedo lograr que al editarlas se pueda seleccionar solo 1 de las 4 respuestas posibles

    el tema es que el radiobotton o radiobuttonlist no se llevan muy bien dentro de estructuras de template, mas que anda por un tema de agrupacion

    tienes que usar un radiobutton de html no funciona el de asp.net

    http://social.msdn.microsoft.com/Forums/es/netfxwebes/thread/e5cc38bb-3f78-4146-b3ab-1014a3076d5c

    en ester articulo se explcia con detalle el problema que este control genera cuando lo usa en un gridview, pero en el repeater pasa lo mismo

    Adding a GridView Column of Radio Buttons

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 11 de septiembre de 2012 19:52

Todas las respuestas

  • Te recomiendo en vez de utilizar un repeater para las respuestas no utilizas un radiobuttonlist?, el datasource de este sería el mismo datasource que estas asignando al datasource del repeater.

    saludos


    Robinson Moscoso Pérez
    [BogotaDotNet.org]
    Bogotá - Colombia
    ------------------
    Si la respuesta te ha ayudado, márcala.

    martes, 11 de septiembre de 2012 16:42
  • gracias por contestar pero no me queda claro lo que me quieres decir
    martes, 11 de septiembre de 2012 18:01
  • mira la idea es la siguiente:

    cambia este código

    <asp:Repeater ID="RepeaterRespuestas" runat="server">
            
    <ItemTemplate>
       
        
    <tr>
            
    <td >
                 <asp:RadioButton ID="rbt_Respuestas" runat="server" GroupName="rbt_listaRespuestas" Checked='
    <%# Eval("Correcta") %>' />
            
    </td>
            
    <td>
                     <asp:TextBox ID="txt_A" runat="server" Width="400px" Text='
    <%#Eval("Descripcion")%>'></asp:TextBox>
           
    </td>
       
    </tr>

               
             
    </ItemTemplate>
            
    </asp:Repeater>

    por un radibuttonlist mas o menos asi:

    <asp:RadioButtonList ID="RadioButtonList1" runat="server" ></asp:RadioButtonList>

    y en el codebehind  en vez de hacerlo de esta forma:

      protected void RepeaterPregunta_ItemDataBound(object sender, RepeaterItemEventArgs e)
           
    {
               
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
               
    {

                        
                   
    Repeater rp = e.Item.FindControl("RepeaterRespuestas") as Repeater;
                   
    TextBox txt = e.Item.FindControl("Txt_A") as TextBox;
                   
    Label l = e.Item.FindControl("Label1") as Label;
                   
    int idPregunta = Convert.ToInt32(l.Text);
                   
                  
                   
    foreach (RepeaterItem item in rp.Items)
                   
    {
                     
    RadioButton  control= e.Item.FindControl("rbtl_Respuestas") as RadioButton;
                       
                       
                   
    }
                    
                   
    if (rp !=null) {

                       
    var ListaRespuestas = from p in dc.Respuestas where p.IdPregunta == idPregunta select p;
                        rp
    .DataSource = ListaRespuestas;
                        rp
    .DataBind();
                   
    }
               
    }
           
    }

    cámbialo por:

      protected void RepeaterPregunta_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
    
                         
                    Repeater rp = e.Item.FindControl("RepeaterRespuestas") as Repeater;
                    TextBox txt = e.Item.FindControl("Txt_A") as TextBox;
                    Label l = e.Item.FindControl("Label1") as Label;
                    int idPregunta = Convert.ToInt32(l.Text);
                    
                   
                    foreach (RepeaterItem item in rp.Items)
                    {
                      RadioButton  control= e.Item.FindControl("rbtl_Respuestas") as RadioButton;
                        
                        
                    }
                     
                    if (rp !=null) {
    
                        var ListaRespuestas = from p in  dc.Respuestas where p.IdPregunta == idPregunta select p;
                        RadioButtonList1.DataSource = ListaRespuestas;
                RadioButtonList1.DataTextField = "Descripcion"
                RadioButtonList1.DataValueField = "IdRespuesta"
                        RadioButtonList1.DataBind();
                    }
                }
            }

    y en este caso el radiobutton list le crea la lista de respuestas con la opcion de radiobutton para que pueda seleccionar solo una, y si ncesita una pregunta con respuestas multiples cambie el radiobutton list por un chekboxlist.

    Espero le sirva.

    Saludos


    Robinson Moscoso Pérez
    [BogotaDotNet.org]
    Bogotá - Colombia
    ------------------
    Si la respuesta te ha ayudado, márcala.

    martes, 11 de septiembre de 2012 18:57
  • no puedo lograr que al editarlas se pueda seleccionar solo 1 de las 4 respuestas posibles

    el tema es que el radiobotton o radiobuttonlist no se llevan muy bien dentro de estructuras de template, mas que anda por un tema de agrupacion

    tienes que usar un radiobutton de html no funciona el de asp.net

    http://social.msdn.microsoft.com/Forums/es/netfxwebes/thread/e5cc38bb-3f78-4146-b3ab-1014a3076d5c

    en ester articulo se explcia con detalle el problema que este control genera cuando lo usa en un gridview, pero en el repeater pasa lo mismo

    Adding a GridView Column of Radio Buttons

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 11 de septiembre de 2012 19:52
  • ok gracias las respuestas voy a implementarlo!

    saludos

    martes, 11 de septiembre de 2012 22:04