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.