0

我用rowcommand&在同一页面上创建了两个按钮rowarguements,但是,只有一个可以正常工作,我不知道为什么当我尝试单击另一个按钮时会提示“意外错误”框。(btnInterview 工作正常,btnContact不工作)

不仅提示错误消息,btnContact也无法触发事件rowcommand

下面的代码(.aspx 部分):

<asp:GridView ID="GridView2" runat="server" AllowPaging="True"
    EmptyDataText="No Sample is found"
    OnPageIndexChanging="GridView1_PageIndexChanging"
    PageSize="20"
    OnSorting="GridView1_Sorting" OnDataBound="GridView1_DataBound"
    OnRowCommand="GridView1_RowCommand" Width="100%" AllowSorting="True" OnRowCreated="GridView1_RowCreated">
    <RowStyle HorizontalAlign="Center" VerticalAlign="Middle" />
    <Columns>
        <asp:TemplateField HeaderText="Phone Interview">
            <ItemTemplate>
                <asp:Button ID="btninterview" runat="server" Text="Interview" CommandName="btninterview_Click"
                    CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" CssClass="intBtn" />
                <asp:HiddenField runat="server" ID="hidid" Value='<%# Bind("Id")%>' />
                <asp:HiddenField runat="server" ID="hidProject" Value='<%# Bind("Project")%>' />
                <asp:HiddenField ID="hidEnablebtn" runat="server" Value='<%# Bind("enableButton")%>' />
            </ItemTemplate>
            <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Phone Interview">
            <ItemTemplate>
                <asp:Button ID="btnContact" runat="server" Text="Contact" CommandName="btncontact_Click"
                    CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" CssClass="intBtn" />
                <asp:HiddenField ID="hidVisibleBtn" runat="server" Value='<%# Bind("visibleButton")%>' />
            </ItemTemplate>
            <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
        </asp:TemplateField>
    </Columns>
</asp:GridView>

下面的代码(c#部分):

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e){
    Button btn = (Button)sender;
    switch (btn.CommandName)
    {
        case "btninterview_Click":
            //do sth1
            break;

        case "btncontact_Click":
            //do sth2
            break;
    }            
}
4

2 回答 2

0

我希望您可以直接从 GridViewCommandEventArgs 本身获取命令名称,如下所示,

switch (**e.CommandName**)
{
    case "btninterview_Click":
        //do sth1
        break;

    case "btncontact_Click":
        //do sth2
        break;
}

REF : GridViewCommandEventArgs

希望能帮助到你!

于 2018-02-28T07:42:05.363 回答
0

您正在使用该RowCommand事件。在这种情况下,sender不是 Button,而是 GridView 本身。因此,由于您尝试将 GridView 转换为 Button,因此您得到了 Cast 异常。你应该铸造CommandSource.

Button btn = e.CommandSource as Button;
于 2018-02-28T07:31:19.697 回答