Button Onclick inside a repeater

14,020

If i understand you correctly you want to handle both button's click event and get a value of the name and color of the Person of that RepeaterItem. You could use the same handler:

aspx:

<asp:Button ID="btnNumber0" OnClick="btn_Click" runat="server" Text="0"/>
<asp:Button ID="btnNumber1" OnClick="btn_Click" runat="server" Text="1"/>   

codebehind:

protected void btn_Click(object sender, EventArgs e)
{
    Button btn = (Button) sender;
    RepeaterItem item = (RepeaterItem) btn.NamingContainer;
    Button btnNewNumber0 = (Button)item.FindControl("btnNumer0");
    Button btnNewNumber1 = (Button)item.FindControl("btnNumer1");
    bool btn0Clicked = btn == btnNewNumber0;
    btnNewNumber0.Visible = !btn0Clicked;
    btnNewNumber1.Visible = btn0Clicked;
    // now call your webservice, you have all you need here
    Label lblName = (Label) item.FindControl("lblName"); 
    Label lblSurname = (Label) item.FindControl("lblSurname"); 
    Label lblNumber = (Label) item.FindControl("lblNumber"); 
    DropDownList ddlColor = (DropDownList) item.FindControl("ddlColor");
    // now call your webservice, you get the color-selection via ddlColor.SelectedValue
}

Use also a DropDownList instead of a HTML Select if you want to access it on serverside.

Share:
14,020
user4059129
Author by

user4059129

Updated on June 04, 2022

Comments

  • user4059129
    user4059129 about 1 year

    I have created a repeater that gets 3 different values from a webbservice(Name, Surname and Number). Depending on if the Number I receive is 1 or 0 there are 2 buttons that are set Visible= true or false. (btnNumber0 and btnNumber1).

    <asp:Repeater ID="rpt1" runat="server" OnItemDataBound="rptHB_ItemDataBound" OnItemCommand="rptHB_ItemCommand">     
        <ItemTemplate>
            <div>
                <h1 class="click">
                    <asp:Label ID="lblName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name").ToString() %>'></asp:Label>
                    <asp:Label ID="lblSurname" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Surname").ToString() %>'></asp:Label>
                    <asp:Label ID="lblNumber" runat="server" Visible="false" Text='<%# DataBinder.Eval(Container.DataItem, "Numer").ToString() %>'></asp:Label>
                </h1>
                <div class="expand"> 
                    <select id="optColor">
                        <option>Blue</option>
                        <option>Red</option>
                        <option>Yellow</option>                       
                        <option>Green</option>
                        <option>Black</option>
                    </select>                  
                    <asp:Button ID="btnNumber0" runat="server" Text="0"/>
                    <asp:Button ID="btnNumber1" runat="server" Text="1"/>                            
                </div>
            </div>
        </ItemTemplate>
    </asp:Repeater>
    

    The thing i cant get to work is to make a onClick function to my 2 button. Inside the OnCick I want to take the Name and Color(optColor) from the Person I select and send it back to my webbservice. Do i have to use OnItemCommand, if so can you help me? Or is it another way you can do it?

    protected void Page_Load(object sender, EventArgs e)
    {
        GetInfo();
    }
    private void GetInfo()
    {
        rpt1.DataSource = client.SendInfo();
        rpt1.DataBind();
    }
    private bool Getbutton(string ValueNumber)
    {
        return ValueNumber == "0";
    }
    protected void rptHB_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        Label lblNewNumber = (Label)e.Item.FindControl("lblNumber");
        Label lblNewName = (Label)e.Item.FindControl("lblName");
        Button btnNewNumber0 = (Button)e.Item.FindControl("btnNumer0");
        Button btnNewNumber1 = (Button)e.Item.FindControl("btnNumber1");
        string Number = lblNewNumber.Text;
        btnNewNumber0.Visible = GetButton(Number);
        btnNewNumber1.Visible = !GetButton(Number);
     }
    protected void rptHB_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        /* ??? */
    }