更改Gridview中选择的单选按钮

时间:2014-03-11 14:40:41

标签: asp.net c#-3.0

我有一个gridview模板字段,其中有3个单选按钮。一旦被检查,其他2被禁用。现在的问题是,如果选中了一个单选按钮,并且下次必须禁用单选按钮时单击一个按钮,并且必须为该特定行启用另一个单选按钮。你能帮忙吗?

foreach (GridViewRow gr in all_day_non_prod_GridView.Rows)
        {

            check1 = ((RadioButton)gr.FindControl("first")).Checked;
            check2 = ((RadioButton)gr.FindControl("reminder")).Checked;
            check3 = ((RadioButton)gr.FindControl("completed")).Checked;
            if (check1)
            {
                reminder = "First";
                n = 1;
                break;
            }
            else if (check2)
            {
                reminder = "Second";
                n = 2;
                break;
            }
            else
            {
                reminder = "Completed";
                n = 3;
                break;
            }
        }

1 个答案:

答案 0 :(得分:0)

所以我认为您需要在复选框中使用CheckedChanged事件。这就是我在我的一个应用程序中使用我的方法。

protected void cbFirstCheckBox_CheckedChanged(object sender, EventArgs e)
{
    //this helps you find the row and control in the gridview
    GridViewRow gvr = (GridViewRow)(sender as Control).Parent.Parent;
    CheckBox firstCheckBox = ((CheckBox)gvr.FindControl("cbSecondCheckBox"));
    CheckBox secondCheckBox = ((CheckBox)gvr.FindControl("cbSecondCheckBox"));

    //I believe you said you want to disable one then enable the 2nd one. 
    firstCheckBox.Enabled = false;
    secondCheckBox.Enabled = true;

}

然后在你的HTML中你要放这个。

<asp:CheckBox ID="cbFirstCheckBox" runat="server" OnCheckedChanged="cbRemoveActive_CheckedChanged" AutoPostBack="true" Enabled="false"/>

现在,单击第一个复选框后,将启用第二个复选框,并禁用第一个复选框。您将AutoPostBack设置为true,以便页面刷新。我相信这就是你想要的。您也可以使用此技术执行其他复选框。我希望这有帮助。

编辑:我刚刚看到您使用了单选按钮。你应该仍然可以用CheckBox代替RadioButton来做同样的事情。我没有测试过上述内容,但我认为它会引导您朝着正确的方向前进。

另一个编辑:你可能真的能够保持你拥有的foreach循环。这也应该有效。

protected void rbFirstButton_CheckedChanged(object sender, EventArgs e)
{
    foreach (GridViewRow gr in all_day_non_prod_GridView.Rows)
    {
        RadioButton rbFirstButton = ((RadioButton)gv.FindControl("rbFirstButton"));
        RadioButton rbSecondButton = ((RadioButton)gv.FindControl("rbSecondButton"));

        rbFirstButton.Enabled = false;
        rbSecondButton.Enabled = true;

    }
 }

上次修改:您无法使用foreach,它将启用所有复选框,而不仅仅是您想要的行..下面的代码就是我测试过的并且有效。

    protected void rbOne_CheckedChanged(object sender, EventArgs e)
    {
        GridViewRow gvr = (GridViewRow)(sender as Control).Parent.Parent;
        RadioButton rbOne = ((RadioButton)gvr.FindControl("rbOne"));
        RadioButton rbTwo = ((RadioButton)gvr.FindControl("rbTwo"));
        RadioButton rbThree = ((RadioButton)gvr.FindControl("rbThree"));

        rbOne.Enabled = false;
        rbTwo.Enabled = true;
        rbThree.Enabled = true;
    }

我相信这就是你要找的东西。我希望这有帮助。