¿Cómo encontrar el botón de opción marcado en una vista de cuadrícula?

¿Cómo encontrar el botón de opción marcado? hay una entrada hatml con tipo de radio y tiene 4 opciones para seleccionar llamadas o1 o2 o3 y o4. Puedo acceder a los botones de radio sin problema. ¿Cómo debo verificar qué opción está seleccionada?

<asp:GridView OnRowCommand="SelectedPollGridView_RowCommand" ID="SelectedPollGridView" runat="server" AutoGenerateColumns="False" DataKeyNames="PollID" DataSourceID="SelectedPollSqlDataSource">
    <Columns>
        <asp:TemplateField>
            <HeaderTemplate>
                <p runat="server" id="HeaderPTag" class="text-center"><small><%#Eval("Header") %></small></p>
            </HeaderTemplate>
            <ItemTemplate>
                <p runat="server" id="BodyPTag" class="text-right"><%#Eval("Body") %></p>
                <asp:Label Visible="false" ID="PollIDLabel" runat="server" Text='<%#Eval("PollID") %>'></asp:Label>

                <div runat="server" id="MainDiv">
                    <div runat="server" id="O1Div">
                        <label runat="server" id="O1Label">
                            <input runat="server" type="radio" name="OptionsOne" id="O1" value='<%#Eval("PollID") %>'>
                            <%#Eval("O1") %>
                        </label>
                    </div>
                    <div runat="server" id="O2Div">
                        <label runat="server" id="O2Label">
                            <input runat="server" class="pull-right" type="radio" name="OptionsTwo" id="O2" value='<%#Eval("PollID") %>'>
                            <%#Eval("O2") %>
                        </label>
                    </div>
                    <div runat="server" id="O3Div">
                        <label runat="server" id="O3Label">
                            <input runat="server" class="pull-right" type="radio" name="OptionsThree" id="O3" value='<%#Eval("PollID") %>'>
                            <%#Eval("O3") %>
                        </label>
                    </div>
                    <div runat="server" id="O4Div">
                        <label runat="server" id="O4Label">
                            <input runat="server" class="pull-right" type="radio" name="OptionsFour" id="O4" value='<%#Eval("PollID") %>'>
                            <%#Eval("O4") %>
                        </label>
                    </div>
                </div>
                <asp:Button CommandArgument='<%# ((GridViewRow) Container).RowIndex %>' CommandName="foo" CssClass="btn btn-info" ID="SubmitPollButton" runat="server" Text="ثبت نظر" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SelectedPollSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:GUOTSConnectionString %>" SelectCommand="SELECT DISTINCT [PollID], [Header], [Body], [O1], [O1Vis], [O2], [O2Vis], [O3], [O1Cnt], [O2Cnt], [O3Cnt], [O3Vis], [O4], [O4Cnt], [O4Vis], [PollDate] FROM [Poll] ">
<SelectParameters>
    <asp:QueryStringParameter Name="PollID" QueryStringField="PollID" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>

y estoy usando este código para acceder a él:

protected void SelectedPollGridView_RowCommand(object sender, GridViewCommandEventArgs e)

{
    if (e.CommandName == "foo")
    {
        // Convert the row index stored in the CommandArgument
        // property to an Integer.
        int index = Convert.ToInt32(e.CommandArgument);

        // Retrieve the row that contains the button clicked 
        // by the user from the Rows collection.      
        GridViewRow row = SelectedPollGridView.Rows[index];

        System.Web.UI.HtmlControls.HtmlInputRadioButton O1Radio = (System.Web.UI.HtmlControls.HtmlInputRadioButton)row.FindControl("O1");
        System.Web.UI.HtmlControls.HtmlInputRadioButton O2Radio = (System.Web.UI.HtmlControls.HtmlInputRadioButton)row.FindControl("O2");
        System.Web.UI.HtmlControls.HtmlInputRadioButton O3Radio = (System.Web.UI.HtmlControls.HtmlInputRadioButton)row.FindControl("O3");
        System.Web.UI.HtmlControls.HtmlInputRadioButton O4Radio = (System.Web.UI.HtmlControls.HtmlInputRadioButton)row.FindControl("O4");
        Label myPollIDLAbel = (Label)row.FindControl("PollIDLabel");
    }
}

ahora, ¿cómo debo verificar qué botón de radio ha seleccionado?

muchas gracias.

preguntado el 02 de diciembre de 13 a las 08:12

2 Respuestas

Botón de radio de entrada Html tiene nombres de propiedades Checked (retorna el tipo booleano), podrías usar este accesorio. para comprobar qué botón de opción se ha seleccionado.

Por ejemplo, después de obtener el control del botón de radio en el controlador de eventos RowCommand, debe verificar la propiedad. como esto:

System.Web.UI.HtmlControls.HtmlInputRadioButton O1Radio = (System.Web.UI.HtmlControls.HtmlInputRadioButton)row.FindControl("O1");
System.Web.UI.HtmlControls.HtmlInputRadioButton O2Radio = (System.Web.UI.HtmlControls.HtmlInputRadioButton)row.FindControl("O2");
System.Web.UI.HtmlControls.HtmlInputRadioButton O3Radio = (System.Web.UI.HtmlControls.HtmlInputRadioButton)row.FindControl("O3");
System.Web.UI.HtmlControls.HtmlInputRadioButton O4Radio = (System.Web.UI.HtmlControls.HtmlInputRadioButton)row.FindControl("O4");

if(O1Radio.Checked)
{
  //O1Radio is selected.
} 
else if(O2Radio.Checked)
{
  //O2Radio is selected.
}
else if(O3Radio.Checked)
{
  //O3Radio is selected.
}
else if(O4Radio.Checked)
{
  //O4Radio is selected.
}

EDITAR

Para agrupar botones de radio, debe establecer el mismo nombre para todos los botones de radio en un grupo:

...
<input runat="server" type="radio" name="Options" id="O1" value='<%#Eval("PollID") %>' />
...
<input runat="server" type="radio" name="Options" id="O2" value='<%#Eval("PollID") %>' />
...
<input runat="server" type="radio" name="Options" id="O3" value='<%#Eval("PollID") %>' />
...
<input runat="server" type="radio" name="Options" id="O4" value='<%#Eval("PollID") %>' />
...

Respondido el 02 de diciembre de 13 a las 11:12

gracias. pero no funciona ya que todos los botones de radio están marcados == verdaderos de forma predeterminada. esto significa que O1Radio.Checked siempre es cierto incluso cuando hago clic en otras opciones de radio. - mahdi hesari

Que porque te pones diferente nombre para cada botón de opción, consulte la respuesta editada. - Alicia

¿Puedes echar un vistazo aquí? De nuevo, muchas gracias :) cambiando css de controles en gridview por separado para cada fila - mahdi hesari

No estoy seguro de haberte entendido bien, pero rusmus la respuesta debería funcionar bien, ¿probaste su método? - Alicia

de hecho, ignoré este método y usé cuatro botones en lugar de la lista de botones de radio y usé cuatro nombres de comando para cada uno de los botones, puede verificarlo aquí aquí - mahdi hesari

Tuve una situación similar hace algún tiempo, que resolví usando la siguiente lógica.

for (int i = 0; i < myGrid.Rows.Count; i++) //Check if item is selected  
        {
          if (((CheckBox)myGrid.Rows[i].FindControl(cbname)).Checked) //If selected            
            {
                .... //Magic Happens
            }
        }

Entonces, todas las filas tienen una casilla de verificación en la cuadrícula, y el ciclo itera a través de todos los datos y verifica si la fila está seleccionada. Espero eso ayude :)

Jizer Jalal

Respondido el 02 de diciembre de 13 a las 13:12

Muchas gracias por su respuesta. pero hay un botón de lista de radio en la vista de cuadrícula y es un control de entrada html 5. la primera respuesta resolvió el problema. gracias de nuevo :) - mahdi hesari

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.