【问题标题】:how to find checked radio button in a gridview?如何在gridview中找到选中的单选按钮?
【发布时间】:2013-12-17 21:14:04
【问题描述】:

如何找到选中的单选按钮? 有一个带有无线电类型的 hatml 输入,有 4 个选项可供选择,称为 o1 o2 o3 和 o4。 我可以毫无问题地访问单选按钮。 我应该如何检查选择了哪个选项?

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

我正在使用此代码访问它:

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");
    }
}

现在我应该如何检查选择了哪个单选按钮?

非常感谢。

【问题讨论】:

    标签: c# asp.net gridview radio-button


    【解决方案1】:

    HtmlInputRadioButton 有一个属性名称Checked(返回布尔类型),你可以使用这个属性。检查选择了哪个单选按钮。

    例如,在 RowCommand 事件处理程序中获得单选按钮控件后,您必须检查道具。像这样:

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

    编辑

    要将单选按钮分组,您应该为组中的所有单选按钮设置相同的名称:

    ...
    <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") %>' />
    ...
    

    【讨论】:

    • 谢谢。但它不起作用,因为默认情况下所有单选按钮都是 Checked==true 。这意味着即使我单击另一个无线电选项,O1Radio.Checked 也始终为真。
    • 那是因为您为每个单选按钮设置了不同的 name,请查看编辑后的答案。
    • 你可以看看这里吗?再次非常感谢你:) changing css of controls in gridview separately for each row
    • 我不确定我是否理解正确,但是 rusmus 答案应该可以正常工作,您尝试过他的方法吗?
    • 事实上我忽略了这个方法并使用了四个按钮而不是单选按钮列表并为每个按钮使用了四个命令名称你可以在这里查看link
    【解决方案2】:

    前段时间我也遇到过类似的情况,我用下面的逻辑解决了。

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

    所以所有行在网格中都有复选框,循环遍历所有数据并检查是否选择了行。希望对你有帮助:)

    凯泽·贾拉勒

    【讨论】:

    • 非常感谢您的回答。但是gridview中有一个单选列表按钮,它是一个html 5输入控件。第一个答案解决了这个问题。再次感谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多