refreshing a grid

11 posts, 0 answers
  1. mww
    mww avatar
    257 posts
    Member since:
    Sep 2012

    Posted 20 Oct 2008 Link to this post

    I have a grid and a RADCombo on a page.  The grid has its datasource mapped to a custom object.  When a user makes a selection in the drop down, I have some code that deletes all the underlying data displayed in the grid.  The data deletion is performed in the Itemsrequested event of the drop down

    Ive traced through the code and this works ok, the problem is that the grid is never refreshed, the HTML stays the same even though there are now no rows to display.  In my code that does the deletion I've used Rebind() which I thought woud work.

    private void DeleteSubCategories()  
            {  
                int id = -1;  
                string res = string.Empty;  
                bool ok = Int32.TryParse(this.HiddenArtistID.Value, out id);  
                if (ok)  
                {  
                    res = categorymanager.DeleteAllSecondaryCategories(id);  
                    if (!string.IsNullOrEmpty(res))  
                    {  
                        RadGridSecondaryCategories.Controls.Add(new LiteralControl("Unable to delete secondary categories. Reason: " + res));  
                          
                    }  
                    RadGridSecondaryCategories.Rebind();  
                      
                      
                }  
            } 

    The rebind does cause the NeedDataSource event to fire and no data is returned, so I how do I get the grid to refresh and show no rows ?

    I have used a RADAJAX manager and added the grid to it in the PageLoad event

    _RADAJAXManager = (Telerik.Web.UI.RadAjaxManager)Master.FindControl("RadAjaxManager1");  
                if (_RADAJAXManager != null)  
                {  
                    _RADAJAXManager.AjaxSettings.AddAjaxSetting(this.RadGridSecondaryCategories, this.RadGridSecondaryCategories, this.RadAjaxLoadingPanel1);  
                      
                } 

     

  2. Vlad
    Admin
    Vlad avatar
    11100 posts

    Posted 22 Oct 2008 Link to this post

    Hello mark,

    You need to add new setting where you can set the combo as initiator and the grid as update control.

    Best wishes,
    Vlad
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. mww
    mww avatar
    257 posts
    Member since:
    Sep 2012

    Posted 22 Oct 2008 Link to this post

    how do I do that ?
  5. Vlad
    Admin
    Vlad avatar
    11100 posts

    Posted 22 Oct 2008 Link to this post

    mark,

    You already have similar code! Please look at your first post.

    Regards,
    Vlad
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  6. mww
    mww avatar
    257 posts
    Member since:
    Sep 2012

    Posted 22 Oct 2008 Link to this post

    If you mean using a RADAjaxManagerProxy, Ive set it up as follows

    <telerik:RadAjaxManagerProxy ID="RadAjaxManagerProxy1" runat="server"
        <AjaxSettings> 
            <telerik:AjaxSetting AjaxControlID="RadComboBoxType"
                <UpdatedControls> 
                    <telerik:AjaxUpdatedControl ControlID="RadGridSecondaryCategories" /> 
                </UpdatedControls> 
            </telerik:AjaxSetting> 
            <telerik:AjaxSetting AjaxControlID="RadComboBoxArtistGenre"
                <UpdatedControls> 
                    <telerik:AjaxUpdatedControl ControlID="RadGridSecondaryCategories" /> 
                </UpdatedControls> 
            </telerik:AjaxSetting> 
            <telerik:AjaxSetting AjaxControlID="RadGridSecondaryCategories"
                <UpdatedControls> 
                    <telerik:AjaxUpdatedControl ControlID="RadGridSecondaryCategories"  
                        LoadingPanelID="RadAjaxLoadingPanel1" /> 
                </UpdatedControls> 
            </telerik:AjaxSetting> 
        </AjaxSettings> 
    </telerik:RadAjaxManagerProxy> 

    But it makes no difference, the data is always deleted as designed but the grid is never refreshed.  If I click the refresh button on the command bar, then the grid gets emptied, but I want this to happen automatically
  7. Vlad
    Admin
    Vlad avatar
    11100 posts

    Posted 22 Oct 2008 Link to this post

    Hello mark,

    How your serve-side method DeleteSubCategories() is executed? Do you have AutoPostBack for the combo?

    Best wishes,
    Vlad
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  8. mww
    mww avatar
    257 posts
    Member since:
    Sep 2012

    Posted 22 Oct 2008 Link to this post

    DeleteSubCategories is executed in the Itemsrequested of the two combos

    <telerik:RadComboBox ID="RadComboBoxType" Runat="server" OnClientSelectedIndexChanging="LoadGenres" 
                            onitemsrequested="RadComboBoxType_ItemsRequested" Skin="Web20"   
                            Width="250px"
                            <CollapseAnimation Duration="200" Type="OutQuint" /> 
                 </telerik:RadComboBox> 
                 <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"  
                                ControlToValidate="RadComboBoxType" ErrorMessage="*" Font-Bold="True"  
                                InitialValue="-- Select A Type --" ValidationGroup="ArtistValidation"></asp:RequiredFieldValidator> 
                    </div> 
                    <div class="cellArtistControl"
                        <telerik:RadComboBox ID="RadComboBoxArtistGenre" Runat="server" OnClientSelectedIndexChanging="LoadCategories"  
                        OnClientItemsRequested="ItemsLoaded" Skin="Web20"   
                        Width="250px" onitemsrequested="RadComboBoxArtistGenre_ItemsRequested"  
                            EnableLoadOnDemand="true" > 
                        <CollapseAnimation Duration="200" Type="OutQuint" /> 
                 </telerik:RadComboBox> 

    Im using loadonDemand so that the item selected in the 'Type' combo is used as a filter for items displayed in the 'Genre' combo

    Tracing though the code shows the deletion is happening.  Ive tried both Rebind and RaisePostBackEvent on the grid in the deletion method, but neither makes any difference.

    Is there something fundamentally wrong with the way Im trying to achive this functionality ?
  9. mww
    mww avatar
    257 posts
    Member since:
    Sep 2012

    Posted 22 Oct 2008 Link to this post

    Ive run out of options now guys.

    I put a 'dummy' combo box on the page and added 2 items.  I added this to the RADAJaxProxyManager.   Selecting an item in this dropdown still didnt cause an ajax postback so the grid didnt refresh.  I set the postback property to 'true' and this made no difference.  I even added the panel that the grid is inside to the ajax proxy manager, this made no difference

    <telerik:RadAjaxManagerProxy ID="RadAjaxManagerProxy1" runat="server"
        <AjaxSettings> 
            <telerik:AjaxSetting AjaxControlID="RadComboBoxTest"
                <UpdatedControls> 
                    <telerik:AjaxUpdatedControl ControlID="RadGridSecondaryCategories" /> 
                </UpdatedControls> 
            </telerik:AjaxSetting> 
            <telerik:AjaxSetting AjaxControlID="RadComboBoxType"
                <UpdatedControls> 
                    <telerik:AjaxUpdatedControl ControlID="RadGridSecondaryCategories" /> 
                </UpdatedControls> 
            </telerik:AjaxSetting> 
            <telerik:AjaxSetting AjaxControlID="RadComboBoxArtistGenre"
                <UpdatedControls> 
                    <telerik:AjaxUpdatedControl ControlID="RadGridSecondaryCategories" /> 
                </UpdatedControls> 
            </telerik:AjaxSetting> 
            <telerik:AjaxSetting AjaxControlID="RadGridSecondaryCategories"
                <UpdatedControls> 
                    <telerik:AjaxUpdatedControl ControlID="RadGridSecondaryCategories"  
                        LoadingPanelID="RadAjaxLoadingPanel1" /> 
                </UpdatedControls> 
            </telerik:AjaxSetting> 
        </AjaxSettings> 
    </telerik:RadAjaxManagerProxy> 


    How Can I force an ajax postback for the grid in the codebehind ?
    I can see the functioanlity working when I hit the refresh button, the NeedDataSource event is fired and the program logic returns a custom collection object with no items in it and sets it as the grid datasource, but the actual grid contents stay the same.
  10. Daniel
    Admin
    Daniel avatar
    4946 posts

    Posted 22 Oct 2008 Link to this post

    Hello Mark,

    Please try AutoPostBack property as suggested by Vlad.

    Regards,
    Daniel
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  11. mww
    mww avatar
    257 posts
    Member since:
    Sep 2012

    Posted 22 Oct 2008 Link to this post

    please read the text of my last message, especially the part where it says

    'I set the postback property to 'true' and this made no difference.'
  12. Daniel
    Admin
    Daniel avatar
    4946 posts

    Posted 23 Oct 2008 Link to this post

    Hello Mark,

    Please excuse me for the inadvertence.

    For the convenience of our community I present your solution here.

    javascript:
    function ItemsLoaded(combo, eventarqs) 
        refreshGrid(null); 
        if (combo.get_items().get_count() > 0) 
        { 
            combo.set_text(combo.get_items().getItem(0).get_text()); 
            combo.get_items().getItem(0).highlight(); 
            combo.showDropDown(); 
        } 
        else 
        { 
            combo.set_text(" "); 
            combo.clearItems(); 
        } 
     
    function refreshGrid(arg) 
        var masterTableView = $find("<%= RadGridSecondaryCategories.ClientID %>").get_masterTableView(); 
        if (masterTableView.get_dataItems().length > 0) 
            $find("<%= Telerik.Web.UI.RadAjaxManager.GetCurrent(Page).ClientID %>").ajaxRequest("SubCategoryRebind"); 
    }  

    codebehind (c#)
    protected void Page_Load(object sender, EventArgs e) 
        RadAjaxManager manager = RadAjaxManager.GetCurrent(Page); 
        manager.AjaxRequest += new RadAjaxControl.AjaxRequestDelegate(RadAjaxManagerProxy1_AjaxRequest);  



    protected void RadAjaxManagerProxy1_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e) 
        switch (e.Argument) 
        { 
            case "SubCategoryRebind"
                this.RadGridSecondaryCategories.Rebind(); 
                break
        } 
    }  

    Kind regards,
    Daniel
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017