2011-01-25 1 views

ответ

57

Это должно сделать это.

Я нашел его здесь: http://forums.asp.net/p/1331581/2678206.aspx

<asp:TemplateField ShowHeader="False"> 
    <ItemTemplate> 
     <asp:ImageButton ID="DeleteButton" runat="server" ImageUrl="~/site/img/icons/cross.png" 
        CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this event?');" 
        AlternateText="Delete" />    
    </ItemTemplate> 
</asp:TemplateField> 
+0

Если вы не хотите использовать изображение, то вы можете так же легко использовать LinkButton вместо ImageButton, как показано в решении от @ Saksham-Gupta ниже –

4

можно сделать с помощью OnClientClick кнопки.

OnClientClick="return confirm('confirm delete')" 
+0

, спасибо, он работал для меня, но в форме всплывающего окна сообщений , есть ли способ появиться на самой веб-странице не как окно сообщения –

11

Я сделал это немного иначе. В моем gridview я установил AutoGenerateDeleteButton="true". Чтобы найти кнопку удаления, я использую jQuery и добавляю событие click к найденным Anchors.

jQuery("a").filter(function() { 
     return this.innerHTML.indexOf("Delete") == 0; 
     }).click(function() { return confirm("Are you sure you want to delete this record?"); 
}); 

Это быстро и просто для того, что мне нужно. Просто помните, что каждый якорь на странице, отображающей Delete, будет выбран jQuery и будет добавлен к нему событие.

+0

Хорошо работает. Вы можете улучшить ситуацию, добавив более конкретный селектор, чтобы искать привязки в сетке, если вам это нужно. –

0

У меня возникли проблемы с получением кнопки CommandField Delete, чтобы почтить ответ «return false», когда пользователь нажал кнопку «Отменить» во всплывающем окне «Вы уверены», с помощью функции подтверждения javascript(). Я не хотел менять его в поле шаблона.

Проблема, как я вижу, заключалась в том, что у этих кнопок CommandField уже есть связанный с ними Javascript для выполнения обратной передачи. Не было достаточно просто добавить функцию confirm().

Вот как я ее решил:

Использования JQuery, я первый нашел каждую кнопку удаления на странице (их несколько), а затем манипулирует связанный Javascript баттона на основе согласованного ли посетитель или отменить подтверждающее поп- вверх.

<script language="javascript" type="text/javascript"> 
$(document).ready(function() { 

       $('input[type="button"]').each(function() { 

        if ($(this).val() == "Delete") { 
         var curEvent = $(this).attr('onclick'); 
         var newContent = "if(affirmDelete() == true){" + curEvent + "};" 
         $(this).attr('onclick',newContent);      
        } 
       }); 
} 

function affirmDelete() {  
       return confirm('Are you sure?'); 
} 
</script> 
1

Попробуйте это:

Я использовал для Update и Удалить кнопки. Он не касается Редактировать кнопка. Вы можете использовать автоматически сгенерированные кнопки.

protected void gvOperators_OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if(e.Row.RowType != DataControlRowType.DataRow) return; 
     var updateButton = (LinkButton)e.Row.Cells[0].Controls[0]; 
     if (updateButton.Text == "Update") 
     { 
      updateButton.OnClientClick = "return confirm('Do you really want to update?');"; 
     } 
     var deleteButton = (LinkButton)e.Row.Cells[0].Controls[2]; 
     if (deleteButton.Text == "Delete") 
     { 
      deleteButton.OnClientClick = "return confirm('Do you really want to delete?');"; 
     } 

    } 
19

Если Gridview используется с AutoGenerateDeleteButton="true", вы можете преобразовать его в LinkButton:

  1. Нажмите GridView Задачи, а затем Edit Columns. https://www.flickr.com/photos/32784002@N02/15395933069/

  2. Выберите Удалить в выбранных полях и нажмите на Преобразовать это поле в TemplateField.Затем нажмите кнопку OK : https://www.flickr.com/photos/32784002@N02/15579904611/

  3. Теперь ваш LinkButton будет сгенерирован. Вы можете добавить OnClientClick события в LinkButton, как это:
    OnClientClick="return confirm('Are you sure you want to delete?'); "

4

Я не хочу никакого изображения таким образом, я изменил ответ, данный @statmaster, чтобы сделать его простой записью вместе с другими столбцами.

<asp:TemplateField ShowHeader="False"> 
     <ItemTemplate> 
      <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this entry?');">Delete </asp:LinkButton>    
     </ItemTemplate> 
</asp:TemplateField> 

Цвет текста может быть изменен с использованием свойства Forecolor.

+0

Это самый простой способ удалить с подтверждением в gridview. – JoshYates1980

3

Мне нравится этот способ добавления запроса подтверждения перед удалением записи из сетки. Это определение CommandField, вложенное в веб-элемент управления GridView на странице aspx. Здесь нет ничего необычного - просто прямое Командное поле.

<asp:CommandField ShowEditButton="true" UpdateText="Save" ShowDeleteButton="True"> 
 
    <ControlStyle CssClass="modMarketAdjust" /> 
 
</asp:CommandField>

Тогда все, что я должен был сделать, это добавить код в событие RowDeleting в GridView контроля. Это событие вызывает до строка фактически удалена, что позволяет получить подтверждение пользователя и отменить событие, если он не хочет отменять все. Вот код, который я ставлю в обработчик события RowDeleting:

Private Sub grdMarketAdjustment_RowDeleting(sender As Object, e As GridViewDeleteEventArgs) Handles grdMarketAdjustment.RowDeleting 
    Dim confirmed As Integer = MsgBox("Are you sure that you want to delete this market adjustment?", MsgBoxStyle.YesNo + MsgBoxStyle.MsgBoxSetForeground, "Confirm Delete") 
    If Not confirmed = MsgBoxResult.Yes Then 
    e.Cancel = True 'Cancel the delete. 
    End If 
End Sub 

И это, кажется, работает хорошо.

+1

. Ответ на этот вопрос является предпочтительным. Во-первых, вам нужно только поставить код на страницу aspx (для этого требуется код как на странице aspx, так и на странице с кодом). Во-вторых, для этого решения требуется MsgBox, и он может не работать на веб-сервере. Вы все равно можете использовать ScriptManager для отображения предупреждения в коде, вместо использования MsgBox, и он будет работать как в Visual Studio, так и на веб-сервере. Но почему бы просто не использовать более простое решение, которое не требует кода в коде? –

0

Этот код подходит для меня.

jQuery("a").filter(function() { 
     return this.innerHTML.indexOf("Delete") == 0; 
     }).click(function() { return confirm("Are you sure you want to delete this record?"); 
}); 
3

Я совсем как добавить код в GridViewRowDataBound случае, чтобы сообщить пользователю, какой именно элемент они пытаются удалить. Чуть лучше пользовательский интерфейс?

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 

    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     LinkButton lnkBtnDelete = e.Row.FindControl("lnkBtnDelete") as LinkButton; 

     // Use whatever control you want to show in the confirmation message 
     Label lblContactName = e.Row.FindControl("lblContactName") as Label; 

     lnkBtnDelete.Attributes.Add("onclick", string.Format("return confirm('Are you sure you want to delete the contact {0}?');", lblContactName.Text)); 

    } 

} 
0

Я люблю решение JavaScript и некоторые обновления для работы с динамическим АЯКСОМ загрузкой:

 $(document).on("click", "a", function() { 
     if (this.innerHTML.indexOf("Delete") == 0) { 
      return confirm("Are you sure you want to delete this record?"); 
     } 
    }); 

Надеется, что это поможет;)

Смежные вопросы