将Repeater绑定到一个数据集后,在另外一个按钮事件中获取Repeater.DataSource,结果总是空的,为什么?
例如:
private Repeater repeater;
private void Page_load(){
   if(!IsPostBack){
     repeater.DataSource = nodeList; //nodeList是一个包含数据的XmlNodeList对象  
   }
}
public void Button_Click(){
   XmlNodeList nodeList = (XmlNodeList)repeater.DataSource;
}
nodeList为空,如何才能获取到原来的这个nodeList?

解决方案 »

  1.   

    应该要把Repeater 设置为static,这样才能在回发的时候保持状态
      

  2.   

    根据经验
    XmlNodeList nodeList = (XmlNodeList)repeater.DataSource;
    是得不到的,
    想得到DataSource有
    1、直接用数据源nodeList
    2、从repeater中一行一行读
    用foreach()就可以
      

  3.   


       XmlNodeList nodeList = (XmlNodeList)nodeList;
    这样试试吧!
    如果按你那样肯定不行了,因为repeater.DataSource 只是局部定义的,所以只在该方法内有效
      

  4.   

    在page_load里读取的数据,,,到另一个事件里就失效了,,,需要重新写
      

  5.   

    你还不如换种方式来实现,将Repeater.DataSource 放置到Session中,这样想取就取啊
    不过页面性能会降低~
      

  6.   

    你把你的数据源nodeList,在求取出来之后,存到cache里面.比如:Cache["nodeList"] = nodeList;
    然后,需要的时候取出来,就可以用了.
      

  7.   

    應該重新利用nodeList得到吧。
      

  8.   

    可将数据源放到Session里面,再在按钮里面取
    XmlNodeList nodeList = Session("nodelist")
      

  9.   

    if(!IsPostBack){ }
    去掉试试
      

  10.   

    使用repeater.items[i].DataItem不能获取到原来绑定在上面的XmlNode;
    将repeater定义为静态,会报错:CS0176: 无法使用实例引用访问静态成员“departmentRepeater”,改用类型名来限定它;目前只能是使用repeater.items[i].FindControl("controlName")来一一获取原来绑定的XmlNode节点属性,感觉非常浪费资源,还有好点的办法没?