Handling events of Control's inside ASP.NET ListView

A user recently asked me on the forums that he has a LinkButton kept inside a ListView that displayed the ProductNames. When a user clicks on the LinkButton, he should get the ProductID in codebehind to retrieve other details. Here's a quick and dirty way of how to do so by handling the OnItemCommand event of the ListView control


<asp:ListView ID="lvProducts" runat="server" DataSourceID="SqlDataSource1"


OnItemCommand="lvProducts_ItemCommand" ItemPlaceholderID="PlaceHolder1">


 <LayoutTemplate>


        <asp:Placeholder


        id="PlaceHolder1"


        runat="server" />


    </LayoutTemplate>


<ItemTemplate>


    <asp:LinkButton ID="LinkButton1" CommandArgument='<%# Eval("ProductID") %>'


    Text='<%# Eval("ProductName") %>' CommandName="View Details"


    runat="server"></asp:LinkButton><br />


</ItemTemplate>


</asp:ListView>


<asp:SqlDataSource ID="SqlDataSource1" runat="server"


    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"


    SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]">


</asp:SqlDataSource>





C#


protected void lvProducts_ItemCommand(object sender, ListViewCommandEventArgs e)


{


    if (e.CommandName == "View Details")


    {


        int productId = (int)e.CommandArgument;


    }


}




VB.NET


    Protected Sub lvProducts_ItemCommand(ByVal sender As Object, ByVal e As ListViewCommandEventArgs)


        If e.CommandName = "View Details" Then


            Dim productId As Integer = CInt(e.CommandArgument)


        End If


    End Sub


1 comment:

  1. Many thanks - this is really clear and allows me to get out of a hole I had dug for myself!

    ReplyDelete