有两个Repeater嵌套,第一个Repeater内有一个ImageButton,绑定到ImageButton的事件是在第一个的OnItemCreated事件中,本来的用意是点击第一个ImageButton时,只影响嵌套内的第一个Repeater,点击第二个ImageButton时,就影响嵌套内的第二个Repeater,但,实际上点击任一个ImageButton都会让嵌套内的Repeater显示数据,我的代码哪里有问题呢?1,前台代码:<asp:Repeater runat="server" ID="rp01" DataSourceID="sds01" OnItemCreated="rp01_ItemCreated">
<itemtemplate>
  <tr>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_00")%></td>
    <td bgcolor="#FFFFFF"><asp:Label runat="server" ID="lbApplyID" Text='<%#DataBinder.Eval(Container.DataItem,"C100_01")%>'/></td>
    <td bgcolor="#FFFFFF" align="center">
    <asp:ImageButton ID="imgBtn1" runat="server" ImageUrl="../../images/expand_blue.jpg" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"C100_01")%>' AlternateText="(Show Details...)"/>
    </td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_02")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_03")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_04")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_05")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_06")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_25")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_26")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_27")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_28","{0:D}")%></td>
    <td bgcolor="#FFFFFF"><%#DataBinder.Eval(Container.DataItem,"C100_29")%></td>
  </tr>
  <tr>
    <td colspan="13" bgcolor="#EFF5DC">
    <asp:Panel runat="server" ID="pn1" Height="100" CssClass="collapsePanel" BackColor="#BEA61B"> 
    签核明细:<br />
    <table cellpadding="0" cellspacing="0" border="1">
    <tr bgcolor="#D9C7A4">
    <td>環節</td>
    <td>建議</td>
    <td>處理者</td>
    <td>處理時間</td>
    </tr>
    <asp:Repeater runat="server" id="rp02" DataSourceID="sds02">
    <itemtemplate>2,后台代码:
//imgBtn1_Click
private void imgBtn1_Click(object sender,CommandEventArgs e)
{
string applyid="";
applyid=e.CommandArgument.ToString();
ViewHandleDetailData(applyid);
}
//imgBtn1_Click

//ViewHandleDetailData
private void ViewHandleDetailData(string applyid)
{
string sqlstr="";
sqlstr+="select AR101_01,AR101_02,AR101_03,dbo.GetUserName(AR101_04) AR101_04,AR101_05 from pub_SignRecord where AR101_01='"+applyid+"'";
sds02.ConnectionString=connstr;
sds02.SelectCommand=sqlstr;
}
//ViewHandleDetailData
//rp01_ItemCreated
    public void rp01_ItemCreated(object Sender, RepeaterItemEventArgs e) 
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{
ImageButton imgBtn=(ImageButton)e.Item.FindControl("imgBtn1");
imgBtn.Command+=imgBtn1_Click;
}
    } 
//rp01_ItemCreated

解决方案 »

  1.   

    示意图如下:
    未点击ImageButton时的图
    点击2处的ImageButton时的图:应该是点击2处的ImageButton时,只有B的Repeater才会绑定数据而已,A、C应该不能执行才对。
    但现在,点击1、2、3时,都会让嵌套内的3个Repeater都有数据。
      

  2.   

    你的repeater2是套在repeater1中用了显示明细信息的是吧?
    那你看你的rp2的datasource的ID不都固定的么?那么每条记录的datasource都是一样的咯,如此,你显示任何一条记录的明细资料的时候,其他的也一起显示了呗,而且信息还是一样的。
      

  3.   


    你说的很对,我试着想将每一行的imgBtn1_Click事件对应它的repeater,但还想不到怎样去做。
    您有做过吗?谢谢
      

  4.   

    改用了另外一个方法:绑定ItemCommand事件,但此时是,如果先点击2处的ImageButton,此时是只会执行显示B中的Repeater数据,但当点击3中的ImageButton,此时执行显示C中的数据后,还会改变B中Repeater数据与C中的Repeater一样,怎么会这样? //
    public void rp01_ItemCommand(Object Sender, RepeaterCommandEventArgs e) 
    {
    Control ctl1=e.Item.FindControl("rp02");
    string applyid="";
    applyid=e.CommandArgument.ToString();
    ViewHandleDetailData(applyid,sds02,((Repeater)ctl1));
        } 
    //
      

  5.   

    可以不用repeater 吗?直接用脚本写我想稍微能简单点