首页 新闻 会员 周边

【有源码】asp.net动态加载一些CheckBox,可是在使用动态加载的checkbox时,却。。

0
悬赏园豆:30 [已关闭问题] 关闭于 2009-07-25 11:09

【代码1】根据读取图片数量动态生成对应的一组CheckBox:

   while (i-- != 0 )
            {
                Image im = new Image();
                im.ID = i.ToString();//
                it3.writeFile((byte[])Pics[i], "UI\\pic\\Heritage" + i.ToString() + ".jpg");
                im.ImageUrl = "~/pic/Heritage" + i.ToString() + ".jpg";

                CheckBox cb = new CheckBox();
                cb.Text = "选中删除";
                cb.Font.Size = System.Web.UI.WebControls.FontUnit.Small;
                cb.ID = "cb"+i.ToString();//
                cb.Checked = false;

                this.Panel1.Controls.Add(im);【动态添加图片】
                this.Panel1.Controls.Add(cb);【动态添加checkbox】
                this.Panel1.Controls.Add(new LiteralControl("<br>"));
                this.Panel1.Controls.Add(new LiteralControl("<br>"));
            }

【代码2】调用checkbox,判断是否被选中(在另一个函数中)

  for (int i = imgNum-1; i >-1 ; i--)
            {
                string id = "cb" + i.ToString();
                CheckBox cbb=(CheckBox)this.FindControl(id);
                                 
                if (cbb.Checked)【调试错误所在行】错误:未将对象引用设置到对象的实例。
                {
                    string 文物图片_ID = dr[i].ToString();
                    文物图片.Delete(文物图片_ID);
                }
            }

            this.Panel1.Controls.Add(new LiteralControl("<font color=red>删除图片成功!</font>"));

【说明】1.我是想从数据库中读取二进制图片信息,并为每一张图片生成一个伴随的CheckBox,然后在一个按钮的click事件中实现删除所有选中checkbox的图片

    2.我查看了生成的HTML源文件,HTML中的确已经有了id为"cb1","cb2" 等的checkbox。。

    3.调试发现 CheckBox cbb=(CheckBox)this.FindControl(id); 其中cbb为NULL ???

!!请大侠指教

 

  

 

林田惠的主页 林田惠 | 初学一级 | 园豆:165
提问于:2009-07-13 09:59
< >
分享
所有回答(5)
0

学习

longing | 园豆:195 (初学一级) | 2009-07-13 10:05
0

CheckBox cbb=(CheckBox)this.FindControl(id); 可能存在错误!!

this.是不对的,首先你是动态生成的这些控件,而且你是把它们放在了this.Panel1.Controls 集合中。所以你的this.controls.是不对的。它只能找到pannel和初始化的一些其它控件。

你应该是先找到pannel.然后在它的this.Panel1.Controls中去找你的那些个checkbox

CheckBox chk=(this.Panel1.Controls.findcontrol("ck1") as checkbox)

 

 


邢少 | 园豆:10926 (专家六级) | 2009-07-13 11:25
0
Code
protected void Page_Load(object sender, EventArgs e)
{
loadControls();
}
public void loadControls()
{
int i=10;
  
while (i-- != 0 )
{

CheckBox cb
= new CheckBox();
cb.Text
= "选中删除";
cb.Font.Size
= System.Web.UI.WebControls.FontUnit.Small;
cb.ID
= "cb"+i.ToString();//
cb.Checked = false;

this.Panel1.Controls.Add(cb);
this.Panel1.Controls.Add(new LiteralControl("<br>"));
}

}
public void WriteChecked()
{
string str = "";

Panel p
= new Panel();
p
= (Panel)this.FindControl("Panel1");
Response.Write(p.ID.ToString());

  
for (int i =9; i >-1 ; i--)
{
string id = "cb" + i.ToString();
CheckBox cbb
=(CheckBox)p.FindControl(id);

if (cbb.Checked)
{
str
+= i.ToString() + ",";
}
}
Response.Write(str.ToString());
}
protected void Button1_Click(object sender, EventArgs e)
{
WriteChecked();
}

 

你主要的原因是  =(CheckBox)this.FindControl(id);应该按照上边的引用

牛牛博客 | 园豆:305 (菜鸟二级) | 2009-07-13 11:25
0

 支持牛牛的解答。。

革命军马前卒 | 园豆:255 (菜鸟二级) | 2009-07-13 13:35
0

string id = "cb" + i.ToString();
if (this.FindControl(id) != null)   //Insus.NET:加上此句试试.

{

                CheckBox cbb=(CheckBox)this.FindControl(id);
                                 
                if (cbb.Checked)【调试错误所在行】错误:未将对象引用设置到对象的实例。
                {
                    string 文物图片_ID = dr[i].ToString();
                    文物图片.Delete(文物图片_ID);
                }
}

Insus.NET | 园豆:932 (小虾三级) | 2009-07-15 10:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册