Напишите javascript для подтверждения удаления в событии удаления строки таблицы вида - PullRequest
1 голос
/ 15 августа 2011

Я удаляю строку из gridview, для которой я использовал поле команды удаления gridview по умолчанию.При нажатии запускается команда удаления строки вида сетки, а выбранная строка удаляется.Все хорошо до сих пор.

Но прежде чем строка будет удалена, мне нужно установить подтверждающее сообщение для пользователя.При нажатии кнопки ОК строка должна быть удалена, иначе нет (при нажатии кнопки отмены).

У меня есть код как;

return confirm('Are you sure to delete?');

Но это прекрасно работает, если есть кнопка ссылки(вместо поля команды), так как я мог бы легко написать событие OnClick кнопки link и добавить атрибуты в событие Gridview RowDataBound.

Как это будет работать для кнопки удаления поля команды?Пожалуйста, руководство!

Спасибо!

Ответы [ 3 ]

2 голосов
/ 15 августа 2011

В этой статье объясняется, как сделать именно то, что вам нужно:

http://www.codeproject.com/KB/webforms/Gridview_Delete_confirmLS.aspx

А вот код, который вам нужен для этого:

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // loop all data rows
        foreach (DataControlFieldCell cell in e.Row.Cells)
        {
           // check all cells in one row
           foreach (Control control in cell.Controls)
           {
                // Must use LinkButton here instead of ImageButton
                // if you are having Links (not images) as the command button.
                ImageButton button = control as ImageButton;

                if (button != null && button.CommandName == "Delete")
                    // Add delete confirmation
                    button.OnClientClick = "return confirm('Are you sure you want to delete this record?');";
            }
        }
    }
}
2 голосов
/ 15 августа 2011

Вот код, который вы можете использовать ....

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        foreach (DataControlField dcf in GridView1.Columns)
        {

            if (dcf.ToString() == "CommandField")
            {
                if (((CommandField)dcf).ShowDeleteButton == true)
                {
                    e.Row.Cells[GridView1.Columns.IndexOf(dcf)].Attributes.Add("onclick", "return confirm('Are you sure you want to delete?');");
                }
            }
        }
    }
}
0 голосов
/ 15 августа 2011

Попробуй это.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        foreach (DataControlFieldCell cell in e.Row.Cells)
        {
            foreach (Control control in cell.Controls)
            {
                // Choose between Button, ImageButton and LinkButton.
                // as my ButtonType="Button". 
                Button button = control as Button;
                if (button != null && button.CommandName == "Delete")
                {
                    string script = "if(confirm('Are you sure to delete?')) __doPostBack('{0}','{1}${2}'); else return false;";
                    string clickEvent = String.Format(
                        script,
                        GridView1.ClientID,
                        button.CommandName,
                        button.CommandArgument);
                    button.Attributes.Add("onclick", clickEvent);                                 
                    break;
                }
            }
        }
    }
}

Гораздо грязнее, чем я ожидал. Лучше использовать asp:TemplateField :)

Обратите внимание, что мой ButtonType="Button"

...