简体   繁体   中英

GridView RowCommand Not Firing

I'm having trouble figuring out why the RowCommand isn't firing. Oddly enough, I have a different GridView on the page and its RowCommand is firing without issue so I have no idea what the problem could be.

I have the following code:

JavaScript

function displayPayees() {
        $('#payeeList').css("display", "block");
        $('#payeeList').dialog({
            modal: true,
            draggable: false,
            resizable: false,
            maxHeight: 600,
            width: 800,
            position: { my: "center top", at: "center top+15%", of: window }
        }); 
    }

.aspx Page

<div id="payeeList" title="Available Payees" style="display:none;">
    <asp:GridView ID="gvPayees" runat="server" Visible="true" AutoGenerateColumns="false" ShowHeaderWhenEmpty="true" Width="100%" AllowSorting="True" OnRowCommand="gvPayees_RowCommand" CssClass="table table-striped">
        <HeaderStyle Font-Bold="True" ForeColor="White" Height="15px" BackColor="#46596b" Wrap="False"></HeaderStyle>
        <Columns>
            <asp:BoundField DataField="TaxID" HeaderText="Tax ID"></asp:BoundField>
            <asp:BoundField DataField="Name" HeaderText="Name"></asp:BoundField>
            <asp:BoundField DataField="Address1" HeaderText="Address"></asp:BoundField>
            <asp:BoundField DataField="Address2" HeaderText="Address 2"></asp:BoundField>
            <asp:BoundField DataField="City" HeaderText="City"></asp:BoundField>
            <asp:BoundField DataField="State" HeaderText="State"></asp:BoundField>
            <asp:BoundField DataField="Zip" HeaderText="Zip"></asp:BoundField>
            <asp:TemplateField HeaderText="">
                <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                <ItemTemplate>
                    <asp:Button ID="btnSelectPayee" runat="server" Text="Select" CssClass="btn btn-default home-btn btn-sm" CausesValidation="false" CommandName="SelectPayee" CommandArgument='<%# Eval("TaxID") & "~" & Eval("Name") & "~" & Eval("Address1") & "~" & Eval("Address2") & "~" & Eval("City") & "~" & Eval("State") & "~" & Eval("Zip") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</div>

Code Behind

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
            BindDetails()
        End If
End Sub

Protected Sub gvPayees_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
    Throw New Exception("Hello?") 'Test code
End Sub

UPDATE:

I noticed that moving the GridView out of it's containing div causes the RowCommand to fire properly.

I'm using jQuery UI to put the GridView into a dialog box to be displayed on a button click. I have display: none on the containing div so that the GridView is invisible until the button click and I think that may be the source of my problem. I'm updating my code here to reflect that.

How can I hide the div until button click without preventing the RowCommand from firing properly?

Change it from a Button to a LinkButton and it will work.

<ItemTemplate>
    <asp:LinkButton ID="btnSelectPayee" runat="server" CommandName="SelectPayee" 
        CommandArgument='<%# Eval("TaxID") %>' >Select</asp:LinkButton>
</ItemTemplate>

Apparently the jQuery UI dialog places the modal outside the </form> tag, so normal buttons don't work anymore. But LinkButtons use JavaScript to perform the PostBack, and they are still registered within the framework.

在此处输入图片说明

first of all you should assign the command name to the buttom in item template like this :

<ItemTemplate>
    <asp:Button ID="Btn1" CssClass="SelectRow" CommandName="Sign" runat="server"
        CausesValidation="false"
        CommandArgument="<%# ((GridViewRow)Container).RowIndex %>" 
        Text="" />
</ItemTemplate>

in the code behind

protected void gvPayees_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Sign")
    {
        GridViewRow gvr = (GridViewRow)(((Button)e.CommandSource).NamingContainer);

        int RowIndex = gvr.RowIndex;
        gvPayees.SelectedIndex = RowIndex;    
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM