This is a migrated thread and some comments may be shown as answers.

Client updateItem() does not fire update command on server side

2 Answers 185 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Yurii
Top achievements
Rank 1
Yurii asked on 10 Aug 2011, 03:35 PM
Client side radgrid updateItem() works absolutely inconsistently. It fires always server update only if I put debugger inside javascript otherwise it may or may not update record. Is that a bug in radgrid?

I have grid with last column template. Idea was to have an Excel like grid - on tab out from last column udate current record and edit next one.

<telerik:GridTemplateColumn  UniqueName="COSTTOCOMPLETE" HeaderText="Cost to Complete">
    <ItemTemplate>
        <telerik:RadNumericTextBox ID="costToComp" runat="server" Text = '<%# Eval("COSTTOCOMPLETE") %>' ReadOnly="true">
            <NumberFormat DecimalDigits="0" />
        </telerik:RadNumericTextBox>
    </ItemTemplate>
    <EditItemTemplate>
        <telerik:RadNumericTextBox ID="costToComp" runat="server" Text = '<%# Bind("COSTTOCOMPLETE") %>'>
            <NumberFormat DecimalDigits="0" />
            <ClientEvents OnBlur="costToComp" />
        </telerik:RadNumericTextBox>
    </EditItemTemplate>
    <InsertItemTemplate>
        <telerik:RadNumericTextBox ID="costToComp" runat="server" Text = '<%# Bind("COSTTOCOMPLETE") %>'>
            <NumberFormat DecimalDigits="0" />
            <ClientEvents OnBlur="costToComp" />
        </telerik:RadNumericTextBox>
    </InsertItemTemplate>
</telerik:GridTemplateColumn>

here is javascript:
function costToComp(sender, args) { 
    var grid = $find('<%= rg_OpenWIP.ClientID %>'); 
    var idx = grid._editIndexes[0]; 
    if (idx != null) { 
        $find(grid.MasterTableView.get_id()).updateItem(parseInt(idx)); 
        var items = grid.get_masterTableView().get_dataItems(); 
        if ((items.length - 1) != idx) { 
            $find(grid.get_masterTableView().get_id()).editItem(parseInt(idx) + 1);//works always 
        
    
    else
        $find(grid.MasterTableView.get_id()).insertItem(); 
    
}; 

2 Answers, 1 is accepted

Sort by
0
Martin
Telerik team
answered on 15 Aug 2011, 12:15 PM
Hello Yurii,

The problem is that you fire two server side commands from the client one after the other. This way the second request stops the first one before it has finished. Instead I would suggest that you fire the second one (Edit command in your case) on the server. Here is how the modified code looks:

Javascript:

<script type="text/javascript">
    function costToComp(sender, args)
    {
        var grid = $find('<%= RadGrid1.ClientID %>');
        var idx = grid._editIndexes[0];
        if (idx != null)
        {
            $find(grid.MasterTableView.get_id()).updateItem(parseInt(idx));
            //var items = grid.get_masterTableView().get_dataItems();
            //if ((items.length - 1) != idx)
            //{
                //$find(grid.get_masterTableView().get_id()).editItem(parseInt(idx) + 1); //works always
            //}
        }
        else
        {
            $find(grid.MasterTableView.get_id()).insertItem();
        }
    };
 
</script>

Code behind:

protected void RadGrid1_UpdateCommand(object sender, GridCommandEventArgs e)
{
    //Updated the database here.
    Label1.Text = "Data base updated at: " + DateTime.Now.ToLongTimeString();
 
    // Put next item in edit mode.
    if(e.Item.ItemIndex < e.Item.OwnerTableView.Items[e.Item.OwnerTableView.Items.Count-1].ItemIndex)
    {
        RadGrid1.EditIndexes.Add(e.Item.ItemIndex + 1);
    }
}

I hope this helps.

Greetings,
Martin
the Telerik team

Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

0
Yurii
Top achievements
Rank 1
answered on 15 Aug 2011, 01:42 PM
Thank you very much. Everything works now.
Tags
Grid
Asked by
Yurii
Top achievements
Rank 1
Answers by
Martin
Telerik team
Yurii
Top achievements
Rank 1
Share this question
or