【问题标题】:How does ASP .Net recognize delete buttons in a GridView?ASP .Net 如何识别 GridView 中的删除按钮?
【发布时间】:2017-04-04 09:43:30
【问题描述】:

我有一个带有 ItemTemplate 按钮的 GridView,它使用 RowCommand 函数来执行 SQL。请注意,其中一个具有 CommandName "delete" 来评估按下了哪个按钮。这会导致 GridView 触发 RowDeleting 事件吗?我假设 ASP .Net 认为我创建了一个自定义删除按钮,因此触发了该事件。我不使用该事件,它在尝试触发它时会引发错误,因为它不存在。有没有办法禁用它?

网格视图

        <asp:GridView ID="gv_uebersicht" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" GridLines="Vertical" OnRowCommand="gv_uebersicht_RowCommand" OnRowDataBound="gv_uebersicht_RowDataBound" OnRowDeleting="gv_uebersicht_RowDeleting">
            <AlternatingRowStyle BackColor="#CCCCCC" />
            <Columns>
                <asp:BoundField DataField="cockpit_id" HeaderText="cockpitid" />
                <asp:BoundField DataField="lieferant" HeaderText="Lieferant" />
                <asp:BoundField DataField="datei" HeaderText="Dateiname" />
                <asp:BoundField DataField="status" HeaderText="Status" />
                <asp:BoundField DataField="erstellzeit" HeaderText="Erstellzeit" />
                <asp:BoundField DataField="meldung" HeaderText="Meldung" />
                <asp:TemplateField HeaderText="Aktion">
                    <ItemTemplate>
                        <asp:Button ID="btn_delete" runat="server" CommandArgument='<%# Eval("cockpit_id") %>' CommandName='<%# "delete" %>' Text="Löschen" Visible='<%# Eval("status_id").ToString() == "2" || Eval("status_id").ToString() == "14" || Eval("status_id").ToString() == "67" || Eval("status_id").ToString() == "68" || Eval("status_id").ToString() == "999" || Eval("status_id").ToString() == "1" || Eval("status_id").ToString() == "69" %>' />
                        <asp:Button ID="btn_move" runat="server" CommandArgument='<%# Eval("cockpit_id") %>' CommandName='<%# "move" %>' Text="Move" Visible='<%# Eval("status_id").ToString() == "2" || Eval("status_id").ToString() == "14" || Eval("status_id").ToString() == "67" %>' />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="status_id" HeaderText="statusid" />
            </Columns>
            <FooterStyle BackColor="#CCCCCC" />
            <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
            <SortedAscendingCellStyle BackColor="#F1F1F1" />
            <SortedAscendingHeaderStyle BackColor="#808080" />
            <SortedDescendingCellStyle BackColor="#CAC9C9" />
            <SortedDescendingHeaderStyle BackColor="#383838" />
        </asp:GridView>

RowCommand 函数

    protected void gv_uebersicht_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        string commandName = e.CommandName;
        string commandArgument = e.CommandArgument.ToString();

        lbl_msg.Text = "Die Datei " + DatabaseFunctions.GetScalar("SELECT VDB_LS_DATEI FROM VDB_LADESTATUS_COCKPIT WHERE VDB_LS_ID = " + commandArgument) + " wird " + (commandName == "move" ? "gemoved." : "gelöscht.");

        ds.UpdateCommand = @"UPDATE VDB_LADESTATUS_COCKPIT
                            SET VDB_LS_STATUS_ID = 19
                            WHERE VDB_LS_ID = " + commandArgument;
        ds.Update();
        ds.InsertCommand = @"DECLARE
                              V_RC INTEGER;
                            BEGIN
                              V_RC := Val.Loeschen_Freigabe_Funktionen(P_Cockpit_ID => " + commandArgument + @",
                                                                       P_Aktion => '" + commandName + @"');
                            END; ";
        ds.Insert();
        fill_gv_uebersicht();
    }

【问题讨论】:

  • 添加你使用的代码
  • @SruthiSuresh 完成
  • 文档说是的,触发了 RowDeleting 事件:msdn.microsoft.com/en-us/library/… 要禁用此行为,显而易见的解决方案是将命令名称更改为预定义名称之一以外的名称。
  • @Joe 我不想更改CommandName,有没有办法禁止GridView 这样做?
  • @lenny 您可以处理 RowDeleting 事件并将 GridViewDeleteEventArgs.Cancel 设置为 true 以阻止该行被删除。

标签: c# asp.net


【解决方案1】:

是的,GridView 触发了RowDeleting 事件,因为按钮的CommandName删除。您必须更改您的CommandName 并且必须从您的GridView 控件中删除OnRowDeleting="gv_uebersicht_RowDeleting"。它不会抛出任何错误。

【讨论】:

  • 有没有办法禁用这个功能?我不希望触发 RowDeleting 事件,因为我的命令之一被称为 delete
  • 您能否通过从GridView 文件中删除OnRowDeleting="gv_uebersicht_RowDeleting" 控制和事件代码来检查.cs 文件?
  • 我只是继续将CommandName 更改为"del" 并在RowCommand 事件中将其更改为"delete"。虽然你不能关闭这个功能很愚蠢
猜你喜欢
  • 2018-07-13
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多