2013-08-15 3 views
1

Я пытаюсь подключить функцию Javascript, чтобы подтвердить удаление записи в GridView. Я знаю, что это можно сделать проще с помощью asp: LinkButton в ItemTemplate, но я пытаюсь подключить его к кнопке CommandField - ShowDeleteButton.Как отобразить сообщение с сообщением с GridView ShowDeleteButton CommandField

Я пытался следовать этому учебнику: display-confirmation-message-on-gridview-deleting

Я новичок в GridView и моя реализация в VB.Net не C#. Вот код, где я пытаюсь внедрить функцию Javascript, и я не могу понять, как/почему мои ссылки row.cell ошибается:

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 разметки фрагмент кода (немного больше занят, чем все связанные столбцы ; я считаю 3 TemplateField пункты после первого и единственного BoundField, чтобы прибыть на 5-ом столбце, следовательно, я = 4 выше):

<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-м столбце:

When I ignore the error, the Command buttons are indeed in the 5th column.

Я получаю ошибку без Try/Загвоздка: Problem on DirectCast

ответ

1

Если вы еще не поняли еще, ваша проблема в ButtonType="Button" здесь:

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

Вы не можете бросить нажмите кнопку. Вы должны определить его как ссылку (обратитесь к MSDN за информацией о классе CommandField). Это работает:

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

Ваш ответ помог мне думать об этом по-новому. Действительно, я изменил ButtonType выше, чтобы Link и DirectCast работал. Но эффект мне не понравился.Итак, я изменил ButtonType на Button и изменил DirectCast на Button, и все это, похоже, работает нормально. Все еще есть немного больше испытаний, чтобы сделать, но спасибо за ваш ответ. –

+0

Я не думал, что иначе – afzalulh

0

Просто вызовите функцию javascript на событие onclientclick и попросите подтверждения. Если он возвращает true, вы можете вызвать код на стороне сервера для удаления.

Ниже приведен код для объяснения

<asp:LinkButton ID="lbDelete" runat="server" OnClick="lbDelete_Click" OnClientClick="return fnConfirm();"> Delete</asp:LinkButton> 

И ниже является Java-функция:

<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

Thanks

-1

Я нашел много ответов на C#.

ASPX страница:

<asp:CommandField DeleteText="Delete" ShowDeleteButton="true" 
    ButtonType="Button" /> 

aspx.vb страница:

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