首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridView RowCommand不开火

GridView RowCommand不开火
EN

Stack Overflow用户
提问于 2017-01-13 16:35:01
回答 2查看 4.9K关注 0票数 0

我很难弄明白为什么RowCommand没有开火。奇怪的是,我的页面上有一个不同的GridView,它的RowCommand是没有问题的,所以我不知道问题会是什么。

我有以下代码:

JavaScript

代码语言: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

代码语言:javascript
复制
<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>

代码在中的应用

代码语言:javascript
复制
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

更新:

我注意到,将GridView从其中移出包含div会使RowCommand正确地触发。

我使用jQuery UI将GridView放到一个对话框中,然后按一下按钮显示。我在包含的display: none上设置了div,所以在单击按钮之前GridView是不可见的,我认为这可能是问题的根源。我在这里更新我的代码以反映这一点。

div 如何隐藏,直到按钮单击而不阻止RowCommand正确触发?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-17 21:22:32

将它从Button更改为LinkButton,它就能工作了。

代码语言:javascript
复制
<ItemTemplate>
    <asp:LinkButton ID="btnSelectPayee" runat="server" CommandName="SelectPayee" 
        CommandArgument='<%# Eval("TaxID") %>' >Select</asp:LinkButton>
</ItemTemplate>

显然,jQuery UI对话框将模态放置在</form>标记之外,因此普通按钮不再工作。但是LinkButtons使用JavaScript来执行PostBack,并且它们仍然在框架中注册。

票数 5
EN

Stack Overflow用户

发布于 2017-01-13 18:20:12

首先,应该将命令名分配给项目模板中的buttom,如下所示:

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

在后面的代码中

代码语言:javascript
复制
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;    
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41639331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档