Search code examples
asp.netvb.netrepeaterlinkbutton

ASP.NET Is there a way to add two "OnItemCommand" to my asp:repeater


I have two button with different commands

<asp:LinkButton ID="lbEditDetails" Text="Edit..." runat="server" CommandName="EditDetails" CssClass="EditAdults" CommandArgument=<%# DataBinder.Eval(Container.DataItem, "number_slept") & "-" & DataBinder.Eval(Container.DataItem, "booking_ref")  %>></asp:LinkButton>

<asp:LinkButton ID="lbSubmitDetails" Text="Submit..." Visible="false" runat="server" CommandName="SubmitDetails" CssClass="SubmitAdults" CommandArgument=<%# DataBinder.Eval(Container.DataItem, "booking_ref")  %>></asp:LinkButton>

And my repeater has

<asp:Repeater id="dgBookings" runat="server" OnItemDataBound="ItemDB" OnItemCommand="EditDetails">

But i need to run SubmitDetails when that button is clicked and EditDetails when that button is clicked.

Any ideas

Thanks

Jamie

UPDATE

My repeater

<asp:Repeater id="dgBookings" runat="server" 
OnItemDataBound="ItemDB" OnItemCommand="ItemCommand">

My Sub commands

Sub ItemCommand(ByVal Sender as Object, ByVal e as RepeaterCommandEventArgs)

If e.CommandName = "EditDetails" Then
    EditDetails()   <---- This is where it's dying
Else If e.CommandName = "SubmitDetails" Then 
    SubmitDetails()
End If

End Sub

Sub EditDetails(ByVal Sender as Object, ByVal e as RepeaterCommandEventArgs)

Dim strPassedItems = e.CommandArgument

Dim strNumberSlept As String = e.CommandArgument.Split("-"C)(0)
Dim strPassedBookingRef As String = e.CommandArgument.Split("-"C)(1)

CType(e.Item.FindControl("ddlEditAdults"), dropdownlist).Visible = True
CType(e.Item.FindControl("ddlEditChildren"), dropdownlist).Visible = True

End Sub

Is there something i'm doing wrong as I'm getting this error

Argument not specified for parameter 'e' of 'Public Sub EditDetails(Sender As Object, e As System.Web.UI.WebControls.RepeaterCommandEventArgs)'.

Thanks

Jamie

UPDATE

Sub ItemCommand(ByVal Sender as Object, ByVal e as RepeaterCommandEventArgs)

If e.CommandName = "EditDetails" Then
    EditDetails(sender,e)
Else If e.CommandName = "SubmitDetails" Then 
    SubmitDetails()
End If

End Sub

sender,e was all i needed to put in.

Thanks

Jamie


Solution

  • Try writing a general OnItemCommand event handler and deciding which method to run based on the CommandName property of the button that was clicked:

    protected void itemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "EditDetails")
            {
                EditDetails();
            }
            else if (e.CommandName == "SubmitDetails")
            {
                SubmitDetails();
            }
        }
    }
    

    and setting the repeater tag to:

    <asp:Repeater id="dgBookings" runat="server" OnItemDataBound="ItemDB" OnItemCommand="itemCommand">