protected void page load()
{
blick=1;
j=0;
}
protected button1_click()
{
bclick=blick+1;
j=j+1;
ReferenceDetails[]rfobj=new ReferenceDetails[bclick];
if(j<=bclick)
{
rfobj[j]=new ReferenceDetails();
rfobj[j].name=txtrfname.text;
rfobj[j].lastname=txtrflastname.text;
}
}
protected preview button_click()
{
Response.write(rfobj[1].name); // HOW i should achieve this
Response.write(rfobj[2].name);
//object reference is not set to instance of an object
}
我想为具有相同属性但值不同的同一类创建一个新对象。在按钮上首先单击要创建的一个对象,并根据用户输入的值绑定。
如果再次单击该按钮,则会再次创建一个新对象,该对象具有相同的属性,但当时用户输入的值不同,并且这些值希望与该对应的对象绑定。
然后我想在另一个按钮单击中获取每个新生成的对象及其关联值,以便在Gridview上显示它。但是对象在上面的代码中新生成为rfobj[1], rfobj[2]
,但是当我转到下一个按钮并访问该值时,它们将为null。
我如何克服它?任何人都可以为我提供这个问题的解决方案吗?
答案 0 :(得分:3)
每次点击按钮时都会创建新的rfobj数组,所以每次只有最后一个条目
您需要将其移至表单 - 例如&#39; blick&#39;计数器。
答案 1 :(得分:0)
这远离良好的编程技术,可能是你有内存泄漏......
但要解决您的问题,问题是:
当您第二次单击该按钮时,将使用按钮数重新创建数组,但只填充最后一个按钮,之前的按钮将重新保留为null,因为它是一个新对象。
您必须在重新创建之前备份您的引用,然后使用以前创建的对象填充先前的数组插槽...
类似的东西:
形式:
ReferenceDetails[] rfobj;
int bclick = 0;
按钮中的:
int old_count = bclick;
bclick=blick+1;
//j=j+1;
ReferenceDetails[] old_rfobj = rfobj;
rfobj = new ReferenceDetails[bclick];
for ( int i = 0; i < old_count; i++ ){
rfobj[i] = old_rfobj[i];
}
if (j<=bclick) {
//rfobj[j]=new ReferenceDetails(); you dont need this
rfobj[bclick-1].name=txtrfname.text;
rfobj[bclick-1].lastname=txtrflastname.text;
}
这个shold适合你,但你可以尝试理解在后台发生的事情,当创建和释放对象时... new
字从系统请求内存......并且这个内存必须在任何时候释放..
祝你好运