Gridview RowCommand not working

Mike picture Mike · Dec 2, 2010 · Viewed 12.4k times · Source

I am having problems trying to get a rowcommand event to fire in a gridview. I followed the code example from MSDNet but I cannot figure out why it is not working. The code is below. Thank you.

<asp:GridView ID="GridViewProducts" runat="server" AutoGenerateColumns="False" 
    BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
    CellPadding="5" CellSpacing="1" DataKeyNames="Pkey" 
    DataSourceID="SqlDataSourceProducts" ForeColor="Black" GridLines="Vertical">
    <FooterStyle BackColor="#CCCCCC" />
    <PagerSettings PageButtonCount="20" />
    <Columns>
        <asp:BoundField DataField="Product" HeaderText="Product" >
            <HeaderStyle HorizontalAlign="Left" />
            <ItemStyle HorizontalAlign="Left" />
        </asp:BoundField>
        <asp:TemplateField HeaderText="Interest">
            <ItemTemplate>
                <asp:DropDownList ID="ddlProductInterest" runat="server" SelectedValue='<%# Bind("ProductInterest") %>'>
                    <asp:ListItem></asp:ListItem>
                    <asp:ListItem>Low</asp:ListItem>
                    <asp:ListItem>Medium</asp:ListItem>
                    <asp:ListItem>High</asp:ListItem>
                    <asp:ListItem>None</asp:ListItem>
                </asp:DropDownList>
             </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="">
            <ItemTemplate>
                <asp:Button runat="server" ID="TestButton" Text="Button" CommandName="Test" 
                CommandArgument="<%# CType(Container, GridViewRow).RowIndex %>" />
            </ItemTemplate>
            <HeaderStyle HorizontalAlign="center" />
            <ItemStyle HorizontalAlign="center" />
       </asp:TemplateField>
    </Columns>
    <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="Silver" Font-Bold="True" ForeColor="Black" />
    <AlternatingRowStyle BackColor="#CCCCCC" />
</asp:GridView>

++Code Behind +++

Sub GridViewProducts_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)

   If e.CommandName = "Test" Then

    Dim index = Convert.ToInt32(e.CommandArgument)
    Dim row = GridViewProducts.Rows(index)
    Dim MyString As String = row.Cells(0).Text

    strSQL = "INSERT INTO tblClosedProducts (" & _
         "Product, ClosedBy, DateClosed " & _
         ") VALUES (" & _
         "@Product, @ClosedBy, @DateClosed " & _
         ")"

    Dim MyParameters1 As SqlParameter() = { _
       New SqlParameter("@Product", SqlDbType.VarChar), _
       New SqlParameter("@ClosedBy", SqlDbType.VarChar), _
       New SqlParameter("@DateClosed", SqlDbType.SmallDateTime) _
    }

    MyParameters1(0).Value = row.Cells(0).Text
    MyParameters1(1).Value = GetInfo.GetFullName(UCase(Right(HttpContext.Current.User.Identity.Name.ToString(), 4)))
    MyParameters1(2).Value = DateAdd("h", -1, Now())

    objData.SQLExecuteNonQuery(strSQL, CommandType.Text, MyParameters1)

  End If

End Sub

Answer

rtpHarry picture rtpHarry · Dec 2, 2010

Your gridview doesnt have the event wired up in its markup.

Try adding in onrowcommand="GridViewProducts_RowCommand" so it looks like this:

<asp:GridView ID="GridViewProducts" runat="server" AutoGenerateColumns="False" 
BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
CellPadding="5" CellSpacing="1" DataKeyNames="Pkey" 
DataSourceID="SqlDataSourceProducts" ForeColor="Black" GridLines="Vertical"
onrowcommand="GridViewProducts_RowCommand">