【代码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 ???
!!请大侠指教
学习
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)
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);应该按照上边的引用
支持牛牛的解答。。
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);
}
}