This is a migrated thread and some comments may be shown as answers.
Server Side Deletes
2 Answers 25 Views
This is a migrated thread and some comments may be shown as answers.
Robert
Top achievements
Rank 1
Robert asked on 19 Nov 2018, 05:35 PM

Is there any way to delete a record server side from a control outside of the RadGrid and have the grid update when the postback returns?

I have a LinkButton that handles deleting a record from the datasource and then calls the RadGrid Rebind method.

This triggers the NeedDataSource() method to fire and subsequently the RadGrid PreRender.  The problem is that when the page finishes the postback, the deleted row is still visible in the grid.  Any other interaction with the grid such as selecting a row or sorting, calls NeedDataSource again and the deleted row is gone.

I've verified that the data that comes back to NeedDataSource right after delete does not contain the row that was deleted.  

There is a similar "Add" functionality that works fine.  Meaning the row is added, data updated and Rebind called and grid shows the new row.  I presume this is because the add calls a RadWindow that is still within the RadPanel that contains the RadGrid whereas the Delete button is outside of the Panel.

 

Here is the psuedo code of what I'm doing.

Private Sub ibtnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ibtnDelete.Click
    DeleteRecord()
End Sub
 
Private Sub DeleteRecord()
   DeleteLogicHere()
  UpdateDataSourceHere()
  RadGrid1.Rebind()
End Sub
 
Protected Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource
    RadGrid1.DataSource = FetchDataSourceHere()
End Sub

 

Here is a mockup of the aspx side.

<asp:LinkButton ID="ibtnDelete" CssClass="icon delete" TabIndex="10" runat="server" ToolTip="Delete Current Record"
ClientClick="return confirm('Are you sure you want to delete this record? If yes, click OK.');"></asp:LinkButton>
 
<telerik:RadAjaxPanel runat="server" ID="RadAjaxPanel1" LoadingPanelID="RadAjaxLoadingPanel1" CssClass="controlsWrapper">
    <telerik:RadGrid RenderMode="Lightweight" runat="server" ID="RadGrid1" OnNeedDataSource="RadGrid1_NeedDataSource"
        AllowPaging="True" AllowSorting="true" AutoGenerateColumns="false"
        OnSelectedIndexChanged="RadGrid1_SelectedIndexChanged"
        OnPreRender="RadGrid1_PreRender"
        OnSortCommand="RadGrid1_SortCommand"
        OnPageIndexChanged="RadGrid1_PageIndexChanged"
        OnPageSizeChanged="RadGrid1_PageSizeChanged">  
    </telerik:RadGrid>
</telerik:RadAjaxPanel>

 

I have also tried adding ibtnDelete to the RadAjaxManager with the RadGrid, but that did not resolve anything.

2 Answers, 1 is accepted

Sort by
0
Robert
Top achievements
Rank 1
answered on 20 Nov 2018, 03:13 PM

I'm still interested in knowing if there is a way to do this as described in the original post, but in case someone finds this and needs a work-around:

Add these properties to the grid:

OnDeleteCommand="RadGrid1_DeleteCommand" AllowAutomaticDeletes="true"

Then add the method to the code behind to call your delete logic:

Protected Sub RadGrid1_DeleteCommand(sender As Object, e As GridCommandEventArgs)
    DeleteRecord()
End Sub

 

Call a javascript method from your button:

<asp:LinkButton ID="ibtnDelete" CssClass="icon delete" TabIndex="10" runat="server"
    ToolTip="Delete Current Record"
    ClientClick="return DeleteSelectedRow();"></asp:LinkButton>

Method:

function DeleteSelectedRow() {
    if (confirm('Are you sure you want to delete this record? If yes, click OK.')) {
        var grid = $find("RadGrid1");
        var masterTableView = grid.get_masterTableView();
        masterTableView.deleteSelectedItems();
    }
    return false;
}

 

This will trigger the grid's postback to call the DeleteCommand performing the data delete.  The "return false;" will prevent the linkbutton from also posting back.  I believe masterTableView.deleteSelectedItems() actually returns false, but I didn't see documentation to confirm if that was by design or for something else.

0
Eyup
Telerik team
answered on 22 Nov 2018, 09:00 AM
Hello Robert,

Your updating logic is correct. The issue is most probably related to the button being outside of the RadAjaxPanel. If you temporarily remove AJAX, you can probably verify that the functionality works as expected:
https://www.telerik.com/support/kb/aspnet-ajax/ajaxmanager/details/get-more-descriptive-errors-by-disabling-ajax

Regards,
Eyup
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
Tags
Grid
Asked by
Robert
Top achievements
Rank 1
Answers by
Robert
Top achievements
Rank 1
Eyup
Telerik team
Share this question
or