首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GridView ShowDeleteButton CommandField显示确认消息

如何使用GridView ShowDeleteButton CommandField显示确认消息
EN

Stack Overflow用户
提问于 2013-08-15 01:16:20
回答 3查看 7.6K关注 0票数 2

我试图附加一个Javascript函数来确认GridView中记录的删除。我知道使用ItemTemplate中的asp:LinkButton可以更容易地做到这一点,但是我正在尝试将它附加到CommandField - ShowDeleteButton按钮。

我试着遵循本教程:display-confirmation-message-on-gridview-deleting

我是GridView新手,我的实现是用VB.Net而不是C#实现的。下面是我尝试注入Javascript函数的代码,我不知道为什么我的row.cell引用是错误的:

代码语言:javascript
复制
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) _
    Handles GridView1.RowDataBound
    If e.Row.RowState <> DataControlRowState.Edit Then
        If e.Row.RowType = DataControlRowType.DataRow Then  'check for RowType DataRow
            Dim id As String = e.Row.Cells(0).Text      'get the position to be deleted
           Try
            'cast the ShowDeleteButton link to linkbutton
            Dim lb As LinkButton
            Dim i As Integer = 4            'cell we want in the row (relative to 0 not 1) 
            lb = DirectCast(e.Row.Cells(i).Controls(2), LinkButton)
            If lb IsNot Nothing Then        'attach the JavaScript function with the ID as the parameter
                lb.Attributes.Add("onclick", "return ConfirmOnDelete('" & id & "');")
            End If
           Catch ex As Exception
           End Try
        End If
    End If

下面是我的GridView标记片段(比所有绑定的列都要多一点;我在第一个也是唯一的TemplateField到达第5列之后计数了3个TemplateField项,因此i=4):

代码语言:javascript
复制
<Columns>
    <asp:BoundField DataField="PositionID" HeaderText="ID" ReadOnly="true" />
    <asp:TemplateField HeaderText="PositionTitle">
        <ItemTemplate>
            <%# Eval("PositionTitle")%>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox runat="server" ID="txtPositionTitle" Text='<%# Eval("PositionTitle")%>' />
        </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Incumbent">
        <ItemTemplate>
            <asp:Label ID="lblUser" runat="server" Text='<%# Eval("Incumbent")%>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:Label ID="lblUser" runat="server" Text='<%# Eval("Incumbent")%>' Visible = "false"></asp:Label>            
            <asp:DropDownList Width="100%" runat="server" 
               id="ddlUsers" AutoPostBack="true" 
               DataTextField="FullName" DataValueField="UserID"
               OnSelectedIndexChanged="ddlUsers_SelectedIndexChanged">
            </asp:DropDownList> 
        </EditItemTemplate> 
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Backup">
        <ItemTemplate>
            <%#Eval("Backup")%>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:Label ID="lblBackup" runat="server" Text='<%# Eval("Backup")%>' Visible = "false"></asp:Label>         
            <asp:DropDownList Width="100%" runat="server" 
               id="ddlUsersBackup" AutoPostBack="true" 
               DataTextField="FullName" DataValueField="UserID"
               OnSelectedIndexChanged="ddlUsersBackup_SelectedIndexChanged">
            </asp:DropDownList> 
        </EditItemTemplate>     
    </asp:TemplateField>

    <asp:CommandField ButtonType="Button" ControlStyle-CssClass="coolbutton" 
        ShowEditButton="true" 
        ShowDeleteButton="true"
        ShowCancelButton="true" /> 

当我忽略错误时,命令按钮确实在第5列中:

在没有尝试/捕获的情况下,我得到的错误是:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-15 04:33:31

如果您还没有搞清楚,那么您的问题就出现在ButtonType="Button"中:

代码语言:javascript
复制
 <asp:CommandField ButtonType="Button" ControlStyle-CssClass="coolbutton" 
        ShowEditButton="true" 
        ShowDeleteButton="true"
        ShowCancelButton="true" /> 

不能用命令按钮来链接按钮。您必须将其定义为链接按钮(有关MSDN类的详细信息,请参阅CommandField )。这是行之有效的:

代码语言:javascript
复制
<asp:CommandField ButtonType="Link" ControlStyle-CssClass="coolbutton" 
            ShowEditButton="true" 
            ShowDeleteButton="true"
            ShowCancelButton="true" /> 
票数 1
EN

Stack Overflow用户

发布于 2014-02-13 04:59:58

只需在onclientclick事件上调用javascript函数并请求确认。如果它返回true,则可以调用服务器端代码来删除。

下面是解释的代码

代码语言:javascript
复制
<asp:LinkButton ID="lbDelete" runat="server" OnClick="lbDelete_Click" OnClientClick="return fnConfirm();"> Delete</asp:LinkButton>

下面是javascript函数:

代码语言:javascript
复制
<script type="text/javascript">
function fnConfirm() {
    if (confirm("The item will be deleted. Are you sure want to continue?") == true)
        return true;
    else
        return false;
}

您可以在下面的链接中使用源代码查看详细文章。

http://www.dotnetpickles.com/2013/03/how-to-show-confirm-message-while.html

谢谢

票数 0
EN

Stack Overflow用户

发布于 2015-02-24 02:48:13

我找到了很多C#答案。

aspx页面:

代码语言:javascript
复制
<asp:CommandField DeleteText="Delete" ShowDeleteButton="true" 
     ButtonType="Button" />

aspx.vb页面:

代码语言:javascript
复制
Protected Sub GridView1_RowDataBound(sender As Object, _
                                 e As GridViewRowEventArgs) _
                                 Handles GridView1.RowDataBound
     If e.Row.RowType = DataControlRowType.DataRow Then

        If (e.Row.RowState <> DataControlRowState.Edit) Then
            Dim oButton As Button
            oButton = CType(e.Row.Cells(14).Controls(0), Button)
            oButton.OnClientClick = _
                "if (confirm(""Are you sure you wish to Delete?"") == false) return;"
        End If

    End If
End Sub
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18244871

复制
相关文章

相似问题

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