Как получить доступ к кнопке удаления сетки вместе с кнопкой редактирования

Я столкнулся с проблемой, когда появляется всплывающее окно «подтверждение удаления», если кто-то выбирает ссылку «Удалить» в представлении сетки.

В частности, всплывающее окно работает при нажатии на ссылку «Удалить», но всплывающее окно также появляется, если я нажимаю ссылку «Изменить» рядом с ним в той же ячейке, а затем нажимаю кнопку «Отмена» для операция обновления, когда она дает варианты «Обновить» и «Отмена».

Я полагаю, это потому, что я получаю доступ к элементу управления «Удалить» по индексу, и когда я нажимаю кнопку «Изменить», кнопка «Отмена» для ссылки «Изменить» затем берет индекс того, где кнопка «Удалить» находится по умолчанию. Очевидно, всплывающее окно для операции «Отмена» нежелательно. Я использую встроенные параметры «Разрешить редактирование» и «Разрешить удаление» для сетки. Ниже приведен код, который я использую.

protected void actionPlanGirdView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow) 
    {
        // reference the Delete LinkButton
        LinkButton db = (LinkButton)e.Row.Cells[0].Controls[2];

        db.OnClientClick = "return confirm('Are you certain you want to delete the record?');";

    }
}

person kyle_13    schedule 11.02.2013    source источник


Ответы (2)


Обновление, я нашел решение этой проблемы. В ситуации, когда вы используете автоматически сгенерированные кнопки «Вставить» и «Удалить» для сетки .NET и хотите программно получить доступ к кнопке «Удалить», я сделал это с приведенным ниже, получая доступ к свойству Text LinkButton. Внутренний оператор if проверяет, является ли LinkButton ссылкой «Удалить», как если бы вы также использовали автоматически сгенерированную ссылку «Вставить», эта позиция индекса может быть местом кнопки «Отмена» для комбинации «Обновить/Отмена», когда вы нажимаете «Вставить» в Вид сетки.

protected void actionPlanGirdView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // reference the Delete LinkButton
        LinkButton db = (LinkButton)e.Row.Cells[0].Controls[2];

            if (db.Text == "Delete")
            {
                db.OnClientClick = "return confirm('Are you certain you want to delete the record?');";
            }
    }
}
person kyle_13    schedule 18.02.2013

Попробуйте использовать FindControl:

LinkButton deleteButton = (LinkButton)e.Row.FindControl("deleteButton");

Удачи.

person sgeddes    schedule 11.02.2013
comment
Это не сработало. Я думаю, потому что у меня нет идентификатора для кнопки удаления, потому что он генерируется автоматически: Сведения об исключении: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. ‹asp:CommandField ShowDeleteButton=True ShowEditButton=True /› - person kyle_13; 11.02.2013
comment
@kyle_13 Где вы создаете кнопку «Удалить»? Можете ли вы опубликовать этот код? - person sgeddes; 11.02.2013
comment
Я не программирую для создания ссылки на удаление, я просто выбираю представление сетки в представлении дизайна, а затем выбираю «Включить удаление» в задачах представления сетки, когда вы нажимаете стрелку для настройки. Затем это производит.. <asp:GridView ID="actionPlanGridView" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="Action_Plan_ID" DataSourceID="dsourceActionPlan" OnRowUpdated="actionPlanGridView_RowUpdated" onrowdatabound="actionPlanGirdView_RowDataBound"> <Columns> **<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />** - person kyle_13; 12.02.2013
comment
@kyle_13 -- только что увидел ваши правки -- хотя я еще не проверял это, вы можете попробовать: List‹LinkButton› links = Tools.FindControlsRecursive‹LinkButton›(e.Row.Controls[0]); LinkButton delete = links.Single(c =› c.Text == Удалить); - person sgeddes; 12.02.2013
comment
@kyle_13 - ну, это еще не все - см. этот пост: forums.asp.net/t /1255553.aspx - person sgeddes; 12.02.2013
comment
@ kyle_13 - кстати, я просто не привык использовать автоматически сгенерированные кнопки - я предпочитаю создавать эти кнопки вручную - в таких случаях гораздо проще управлять. ‹asp:LinkButton ID=lnkButtonDelete runat=server CausesValidation=False CommandName=Delete Text=Delete›‹/asp:LinkButton› — таким образом вы добавляете OnClientClick непосредственно в кнопку и не беспокоитесь о внутреннем коде. Удачи. - person sgeddes; 12.02.2013