页面中有一按钮(ID为Button1)和一表格(ID为F),我想让每按一次按钮在表格中添加一个FileUpload控件。代码如下:protected void Button1_Click(object sender,EventArgs e)
{
    HtmlTableRow HTR=new HtmlTableRow();
    HtmlTableCell HTC=new HtmlTableCell();
    HTC.Controls.Add(new FileUpload());
    HTR.Controls.Add(HTC);
    F.Rows.Add(HTR);
}这样的话只能添加一个FileUpload控件。但是如果在添加控件之前用Session保存FileUpload控件数组,按钮的Click事件中循环添加Session中的FileUpload控件数组后再添加一个新的FileUpload控件就可以无限添加下去。为什么直接用上面代码添加控件会只能添加一个呢?——————————————————————————————————————————————————————————另,我还是不太明白用DataAdapter填充DataSet获取数据表和使用DataReader获取数据表有什么不同。他们可以互相代替吗?什么情况下使用哪一种方法获取数据表的方法?

解决方案 »

  1.   

    问题一:因为Button1需要重新加载页面,上次添加的FileUpload控件已经丢失,可以使用Session实现你的需求。问题二:个人认为,单向只读的记录集用DataReader,效率高。
      

  2.   

    DataAdapter,取出来是放在内存中,你可以随时访问,
    DataReader 是快速向前的.不可以后退.同时,读完就要关了,不然其他的连接不能用.他占着连接的.每次只写一个,那是因为上次的已丢了,没有进行重新构建对象.
    动态建的对象在回传后,你要自己再次去重构,重建此对象后,他能显示上一次的值.你用session,就相当是重新建了些对象了
      

  3.   

    1楼的说法有问题吧,datareader的效率不高,那什么最高呢.    
    如果不高的话,你觉得有这个对象的存在吗.希望你能看看基础的知识.
      

  4.   

    这样的功能应该使用客户端添加,不要拘泥于服务器控件
            var input = "<INPUT type=\"file\" size=\"50\" NAME=\"File\"/><br/>";

           document.getElementById('fileUpload').insertAdjacentHTML(""beforeEnd"",input);
    DataReader只向前读,效率高,功能弱些
      

  5.   

    datareader的效率高,有人说不高吗?
    1楼正确
      

  6.   

    这个与ASP.NET页面的执行原理有关,动态增加的控件回发以后没有保存到VIEWSTATE,所以每次都要重新生成.
    http://blog.csdn.net/vigorcsdn/archive/2006/01/07/572552.aspx
      

  7.   

    http协议是无状态协议,每当post到服务器,其变量都会重新初始化.服务器控件能维持状态是因为有ViewState,楼主也可用ViewState去保存.