如题:          <asp:Repeater ID="Repeater1" runat="server" 
                onitemcommand="Repeater1_ItemCommand" onitemdatabound="Repeater1_ItemDataBound">
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true"></asp:TextBox>
                        </td>
                        <td>
                            <asp:Button ID="Button1" runat="server" Text="Button" />
                        </td>
                        <td>
                            <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"/>
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
repeater中有个TextBox1,如何让,当我修改textBox的值时候触发ItemCommand事件?

解决方案 »

  1.   

     onfocus="test(this)"
     function test(o) {}
    protected void btn_Click(object sender, EventArgs e)   
      {   
      Button btn=sender as Button;   
      RepeaterItem item =btn.NamingContainer as RepeaterItem;   
      }   
     
     
      

  2.   

    onfocus="test(this)"
     function test(o) {}这个是JS?onfocus是TextBox触发的吗?
    不明白,我不需要用button来触发itemCommand
      

  3.   

    用TextBox触发ItemCommand?不知道你需要怎样触发?是点击?文本改变?keydown?keyup?说清楚点嘛
      

  4.   

    <asp:Repeater ID="Repeater1" runat="server" 
      onitemcommand="Repeater1_ItemCommand">
    <ItemTemplate>
    <%#Eval("txt") %><table>
        <tr>
            <td>
                <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
            </td>
            <td>
                <asp:Button ID="Button1" runat="server" Text="Button"  />
            </td>
            <td>
                <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"/>
            </td>
        </tr></table>
    </ItemTemplate>
    </asp:Repeater>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("id");
            dt.Columns.Add("txt");
            dt.Rows.Add("1", "1txt");
            dt.Rows.Add("2", "2txt");
            Repeater1.DataSource = dt;
            Repeater1.DataBind();
        }
    }
    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        //注意这里的参数设置
        RepeaterCommandEventArgs e1 = new RepeaterCommandEventArgs(((TextBox)sender).NamingContainer as RepeaterItem,sender,new CommandEventArgs("test",null));
        Repeater1_ItemCommand(Repeater1, e1);
    }
    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        string ss = e.CommandName;
        if (ss == "test")
            Response.Write("123");
    }
      

  5.   

    RepeaterCommandEventArgs e1 = new RepeaterCommandEventArgs(((TextBox)sender).NamingContainer as RepeaterItem,sender,new CommandEventArgs("test",null));
    ============
    注意红色部分是获取repeater事件item,绿色部分是自定义事件Name,类似于delete、update等如果你怀疑事件的真实性可以:    string ss = e.CommandName;
        if (ss == "test")
           Response.Write( e.Item.ItemIndex.ToString());//输出事件行索引,发现正确
      

  6.   

    这样确实可以触发ItemCommand事件,但是不是我想要的我之所以想要触发ItemCommand事件,是想更新一个UpdatePannel页面代码: <table>
                <tr>
                    <asp:ScriptManager ID="ScriptManager1" runat="server">
                    </asp:ScriptManager>
                </tr>
                <tr>
                    <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
                        <ItemTemplate>
                            <%#Eval("txt") %><table>
                                <tr>
                                    <td>
                                        <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
                                    </td>
                                    <td>
                                        <asp:Button ID="Button1" runat="server" Text="Button" />
                                    </td>
                                    <td>
                                        <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" />
                                    </td>
                                </tr>
                            </table>
                        </ItemTemplate>
                    </asp:Repeater>
                </tr>
                <tr>
                    <asp:UpdatePanel ID="upl" runat="server" >
                        <ContentTemplate>
                            <asp:Label ID="lbl" runat="server" Visible="true" Text="label"></asp:Label>
                        </ContentTemplate>
                        <Triggers>
                            <asp:AsyncPostBackTrigger ControlID="Repeater1" EventName="ItemCommand" />
                        </Triggers>
                    </asp:UpdatePanel>
                </tr>
            </table>
    后台代码: protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("id");
                    dt.Columns.Add("txt");
                    dt.Rows.Add("1", "1txt");
                    dt.Rows.Add("2", "2txt");
                    Repeater1.DataSource = dt;
                    Repeater1.DataBind();
                }
            }        protected void TextBox1_TextChanged(object sender, EventArgs e)
            {
                //注意这里的参数设置
                RepeaterCommandEventArgs e1 = new RepeaterCommandEventArgs(((TextBox)sender).NamingContainer as RepeaterItem, sender, new CommandEventArgs("test", null));
                Repeater1_ItemCommand(Repeater1, e1);
            }
            protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
            {
                string ss = e.CommandName;
                if (ss == "test")
                    Response.Write("123");
                this.lbl.Text += ss;
            }
    虽然Repeater1_ItemCommand事件触发了,但是upl里面的内容并没有更新。
      

  7.   

    更新的逻辑需要你自己去写,难道程序还能够帮你自动完成了?那你update、delete、不还得自己写sql吗?test只是个测试,你可以把test改成update、delete==========
      

  8.   

    ItemComand 里面的事件怎么写啊?  我加了一个修改按钮,但是里面的事件不会写