访问动态RadioButtonList数组对象

时间:2012-03-14 00:19:36

标签: c# asp.net

我已经创建了一个RadioButtonList类的数组,但显然似乎无法访问它或使用从中检索到的答案。我总是得到异常:对象引用未设置为对象的实例

  static int jimmy = 0;


    protected void Button5_Click(object sender, EventArgs e)
    {
        int sizeOfPain = GlobalVariables.sympLCWR1Pain.Count;

        RadioButtonList[] RBLPain = new RadioButtonList[sizeOfPain];

        Label1.Visible = false;
        RadioButtonList1.Visible = false;


        Label[] Labella = new Label[sizeOfPain];

        if (jimmy < sizeOfPain)
        {
            Labella[jimmy] = new Label();
            RBLPain[jimmy] = new RadioButtonList();

            Labella[jimmy].Text = GlobalVariables.sympLCWR1Pain[jimmy];

            RBLPain[jimmy].Items.Add("Yes");

            RBLPain[jimmy].Items.Add("No");

            Panel1.Controls.Add(Labella[jimmy]);
            Panel1.Controls.Add(RBLPain[jimmy]);



                if (RBLPain[jimmy].SelectedIndex == 0)
                {
                    GlobalVariables.sympLCWR1Yes.Add(GlobalVariables.sympLCWR1Pain[jimmy]);
                }


        }

        else
        {
            Label2.Text = "YOUS DONE!";

                Label3.Text = GlobalVariables.sympLCWR1Yes[0];

            Button5.Visible = false;

        }  

        jimmy++;


    }

我在if条件下得到例外。任何帮助将不胜感激,谢谢:)

2 个答案:

答案 0 :(得分:0)

该错误意味着您正在尝试访问尚未实例化的内容。在您更新的代码中,我看到您在点击事件处理程序中有以下内容:

 RadioButtonList[] RBLPain = new RadioButtonList[sizeOfPain];
 Label[] Labella = new Label[sizeOfPain];

这意味着每次处理click事件时,您都要重新声明RBLPainLabella数组。此外,当执行离开处理程序时,变量超出范围,因此您将无法在其他函数中使用它们,或者使用处理程序中从一次调用到下一次调用的更改。我不知道你的其余代码在做什么,但尽管看似不必要的数组,执行应该在你的click事件中存活下来。

在原始帖子中,您尝试访问SelectedItem.Text的{​​{1}}属性。在此修订版中,您正在检查RBLPain[jimmy]。当SelectedIndex为-1时,SelectedIndex将为空,这可能会导致您的原始问题。无论您的表单上发生了哪些更改,因为您在每次点击活动期间都在创建新的SelectedItem,但您没有使用表单中的值 - RadioButtonList将始终为-1看到。

答案 1 :(得分:0)

我不明白为什么要检查条件。如果你在buttonclick上创建rbl,那么第一项应该总是被选中。无论如何在if条件之前使用RBLPain[jimmy].SelectedIndex=0;