这样的例子:
1.有2个绑定程序binddata1(),binddata2()都是动态创建列和模板且带editbutton
2.有2个button,分别触发button1_click和button2_click事件
其中button1_click事件就是调用binddata1(),button2_click事件是调用binddata2()由于binddata1和binddata2事件都必须在page_load()时就加载(不然无法触发动态创建的editbutton引发的事件).现在的问题是,如何在page_load时就判断出我是button1点击引起的还是button2点击引起的。
我用单步调试看到的顺序是这样的每次点击一个button,都会先page_load下,然后再进入相应的button_click事件.单步调试执行过程
1.page_load 调用binddata1和binddata2
2.执行相应的button_click事件调用相应的binddata程序这样就重复加载数据了
不知道如何处理这类事情?

解决方案 »

  1.   

    binddata1和binddata2这两个函数都带上参数
    调用的时候放至不同的参数,再判断参数不就知道了是谁调用的么
      

  2.   

    在page_load中,应该按照上一次页面输出时的数据绑定1和2,而不应该读取最新的数据源数据。现在看到的例子基本上全都是不合逻辑的,可是这些例子几乎已经成了习惯上的“标准”程序。绑定的控件,不一定只有最普通的asp.et控件,可能还有用户控件、列表控件等等复杂控件,而这些复杂控件内嵌控件的最新数据、触发的事件只能在重新绑定数据之后才能得到执行。可见,page_load中的绑定是不能省的。在你的button1_click中,你不过是绑定了第一个列表控件,而第二个并没有绑定。并且绑定整个列表数据可能是多余的,也许仅仅重新修改某个项的数据就可以了,例如也许在button1_click中对数据源进行某行修改,然后直接修改DataGrid的某个Item中的各列(各列都是一个TableCell),而并不一定重新绑定DataGrid的数据。可见,这与page_load中的操作不能看作是重复的,如果做了多余的事应该分别各自简化操作,而不能要求偏废其它无关的地方的操作。
      

  3.   

    page_load中我不能只用简单的datagrid1.databind(),因为我的datagrid1列都是动态创建的,每次postback都会消失,必须重新add下,不知道怎么办?
      

  4.   

    这样的要求很简单的办法就是:放一个hidden项,按下button1后首先触发客户端js,置hidden值1或者2, 然后回发就可以判断了!
      

  5.   

    在page_load中判断page.ispostback,如果是第一次就binddata1 binddata2。
    然后在button1 button2的click中再执行相应的binddata
      

  6.   

    每个button都有handle的,自然就知道。
      

  7.   

    现在的问题是,如何在page_load时就判断出我是button1点击引起的还是button2点击引起的。楼主是不是想要解决这个问题,
    这个问题可以解决,如果楼主要解决的话,
    可以在PAGELOAD里写代码判断是哪个按纽点击的,
    再用个判断写分支代码,
    如果是这个问题,回头我给你代码
      

  8.   

    wslinfeng,就是这个问题,给点提示把,谢谢啦
      

  9.   

    动态创建的控件必须在page_load里重新再创建一次,否则它的值跟它的事件都没有用。我也不知道内在的原因是什么,只是在应用过程中发现的这一现象。要判断的话可以象前面的兄弟所说的用一个隐藏域来设定它。在客户端改变这个域的值。然后在page_load的时候检测。
      

  10.   

    在pageload事件里写,判断是哪个控件引发的事件执行不同的代码foreach (System.Web.UI.Control mycontrol in this.Page.Controls[1].Controls)
    {
    if (mycontrol is System.Web.UI.WebControls.Button)
    {
    if(((Button)sender).ID=="Button1")
    {
    //如果是BUTTON1触发的事件,执行要执行的代码
    }
    else if(((Button)sender).ID=="Button2")
    {
    //如果是BUTTON2触发的事件,执行要执行的代码 }

    }
    }
      

  11.   

    wslinfeng谢谢,我明天试验下,分先给你了