我得到复选框的错误值

时间:2010-01-19 08:59:30

标签: c# asp.net

public static CheckBox[] cb = null;
int z=0;
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        {
        cb = new CheckBox[count - k];
        //Database code.........
        while (dr.Read())//read data from access database
                {
            cb[z] = new CheckBox();
                    cb[z].Text = dr["Member_Name"].ToString();
                        Panel2.Controls.Add(cb[z]);
                        Panel2.Controls.Add(new LiteralControl("</br>"));
                        z = z + 1;
        }
    }
}
protected void Button6_Click(object sender, EventArgs e)
{
        for (int x = 0; x < cb.Length; x++)//ERROR IS HERE:Object reference not set to an instance of an object.
        {
        if (cb[x].Checked == true)
                {
                //processing check boxes    
        }
    }
}

3 个答案:

答案 0 :(得分:2)

每次调用页面时都需要初始化数组,而不仅仅是在第一次加载页面时。

答案 1 :(得分:1)

您的复选框数组不是页面视图状态的一部分,因此不会在回发时为您初始化。单击该按钮会导致回发并且cb数组未初始化。

你可以这样做:

foreach (Control ctrl in Panel2.Controls)
        {
           CheckBox cb = ctrl as CheckBox;
           if (cb != null && cb.Checked)
                {
                //processing check boxes    
                }
        }

答案 2 :(得分:0)

奥利弗的回答是正确的。您需要做的就是删除检查页面的IsPostBack属性的if条件,这就是原因: 当您在运行时创建控件然后将其附加到asp页面的结构时,每次将页面传递到客户端时都会呈现它。 因此,当您第一次请求页面时,一旦创建它,​​它就会被渲染。 如果页面再次发回服务器,则应按顺序创建控件的对象,然后从页面的视图状态加载其先前的状态(对于您的情况下的Checked属性,为true或false)< / p>