在下最近在写代码的时候遇到的问题,就是已经在表格中插入了一些类如:label一类的代码。在后台程序的位置想用循环通过提取数据库数据对相应位置的Lable赋值,结果无法在循环中按一定的规律表达出相应控件名(ID).后多方求解后在CSDN找到一位仁兄问过此问题,结果解决问题的链接打不开,找不到原文了。后通过度娘找到同仁问到同一问题,有好心人解答。看后懂了,想把该方法做个新手笔记,同时也希望有同样困难的朋友能得到这个解决方法。
百度知道里问到:
this.CR2.Text = tempC[j, 2]; this.CR3.Text = tempC[j, 3]; ... this.CR10.Text = tempC[j, 10]; 上面是最初的方法, 这个是能实现的,现在我想用循环的方法实现啊!为什么我查了多少方法但是都报出 “未将对象引用设置到对象的实例” 的错误呢? 比如: for (k = 2; k <= 10; k++) { (this.FindControl("CR", i) as Label).Text = tempC[j, k]; } 出错,“未将对象引用设置到对象的实例”! 如何解决?
问题补充:
上面那个例子是我复制错了的,头晕了! 再比如这个吧,也是同样的错误! for (k = 2; k <= 35; k++) { Label lableTemp = this.FindControl("CR" + k.ToString()) as Label; lableTemp.Text = tempC[j, k]; }
满意回答
FindControl("CR", i)中间的i是不是应该是k,而且似乎也不该用这个方法。 试试将 (this.FindControl("CR", i) as Label).Text = tempC[j, k]; 换成 Label l; l=(Label)FindControl("CR"+k.ToString()); l.Text=tempC[j,k]; 或者直接改成 (Label)FindControl("CR"+k.ToString()).Text = tempC[j, k];
追问
呃,下面那个是我弄错了,当时是 for (k = 2; k <= 10; k++) { (this.FindControl("CR"+ k.tostring()) as Label).Text = tempC[j, k]; } 就是抛那个错误,无奈了在乱搞呢,我先去试试! l.Text = tempC[j, k]; 这条,“未将对象引用设置到对象的实例”。 呃。。
回答
Label l; l=(Label)FindControl("CR"+k.ToString()); if(l!=null) l.Text=tempC[j,k];
追问
有IF没有出错,但是数据也没有进入Label ,因为l.Text=tempC[j,k]; 貌似根本就没运行,另外我看了下,中断的时候, 局部变量 l 的值 根本就是 NULL, 这是怎么情况呢?
回答
这个也就是说findcontrol根本就没找到那个控件,具体原因你需要再检查,比如说你的cr2之类都在LoginView1中,那就要用this.LoginView1.FindControl
希望能帮到大家,也希望自己早日成长,摆脱这些常识性的新手问题。