[CLOSED] Add or replace item in Store

  1. #1

    [CLOSED] Add or replace item in Store

    Hello,

    in my application I am adding items to a store via DirectMethod. This works fine.
    The items are added if the IDProperty is not already contained in the store.
    If it´s already contained, then the item is replaced.

    This is exactly what I need.

    Now I want to optimize my code and add in some situations items only via JavaScript (without DirectMethod).

    But this does not really work. Items of the same Id are added several times and not replaced.

    The Js-Code looks like this:

    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    
        <script runat="server">        
            
            public class Item
            {
                public string Id { get; set; }
                public string Text { get; set; }
    
            }
    
            [DirectMethod]
            public void AddItemDirect()
            {
                var value = TextFieldItem.Text;
                var id = NumberFieldId.Value;
    
                if (!String.IsNullOrEmpty(value))
                {
                    Item t = new Item();
                    t.Id = value;
                    t.Text = value;
                    Store1.AddRecord(t);
                }
            }
        </script>
     <ext:ResourcePlaceHolder ID="ResourcePlaceHolder1" runat="server" Mode="Script" >       
    
        <script type="text/javascript" language="javascript">
            var AddItemJavaScript = function(value, id, store)
            {
                if (value != undefined &amp;&amp; value != '')
                {
                    store.add(new store.recordType({ Id: id, Text: value }));
                }
            }
        </script>
    </ext:ResourcePlaceHolder>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        
            <ext:Store ID="Store1" runat="server" AutoLoad="true" ShowWarningOnFailure="true">
                <Proxy>
                    <ext:PageProxy />
                </Proxy>
                <Reader>
                    <ext:JsonReader IDProperty="Id" TotalProperty="total">
                        <Fields>
                            <ext:RecordField Name="Id" Mapping="Id" />
                        </Fields>
                    </ext:JsonReader>
                </Reader>
                <DirectEventConfig Timeout="120000" />
                <Listeners>
                    <LoadException Handler="Ext.MessageBox.alert('Load failed', response.statusText);" />
                </Listeners>            
            </ext:Store>
            <ext:FormPanel ID="BasicPanel" runat="server" Layout="Row" Width="500">
                <Items>
                    <ext:GridPanel ID="GridPanel1" runat="server" StripeRows="true" Title="Add Test"
                        StoreID="Store1" Width="600" Height="350">
                        <ColumnModel runat="server">
                            <Columns>
                                <ext:Column ColumnID="Id" Header="Id" DataIndex="Id" />
                            </Columns>
                        </ColumnModel>
                        <View>
                        <ext:GridView Id="GridView" runat="server" />
                        </View>
                    </ext:GridPanel>
                    <ext:NumberField ID="NumberFieldId" runat="server" FieldLabel="Enter an id" Text="1" />
                    <ext:TextField ID="TextFieldItem" runat="server" FieldLabel="Enter value" />
                </Items>
                <Buttons>
                    <ext:Button ID="ButtonJavaScript" Text="Add via JavaScript" runat="server">
                        <Listeners>
                            <Click Handler="AddItemJavaScript(#{TextFieldItem}.getValue(),#{NumberFieldId}.getValue(), #{Store1});" />
                        </Listeners>
                    </ext:Button>
                    <ext:Button ID="ButtonDirectMethod" Text="Add via DirectMethod" runat="server">
                        <Listeners>
                            <Click Handler="#{DirectMethods}.AddItemDirect();" />
                        </Listeners>
                    </ext:Button>
                </Buttons>
            </ext:FormPanel>
        
    
        </form>
    </body>
    </html>

    But with this sample page I also have a problem, because am getting the error "g is undefined" when I use the DirectMethod,
    and I do not have any idea why. In my "real" application the DirectMethod works fine.
    When I use "AddSortedRecord" then I do not get the error, but the DirectMethod adds the Id also multiple times.

    So... what to do?

    What is the most efficient way to replace (not add) data to a store in JavaScript and in C# via DirectMethod?


    Regards,

    Martin



  2. #2

    RE: [CLOSED] Add or replace item in Store

    Hi,

    It is not correct to add data with existing id (exception occur when you try to add record and the last row in the grid has the same id). You have to prevent inserting or remove existing record with same id
    To insert record in the client side please use 'addRecord' and 'insertRecord' methods

    Please see the following sample (direct method prevents inserting if id is existing and javascript code remove existing record before inserting, just for demonstrate different approaches)
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    
        <script runat="server">        
            
            public class Item
            {
                public string Id { get; set; }
                public string Text { get; set; }
    
            }
    
            [DirectMethod]
            public void AddItemDirect()
            {
                var value = TextFieldItem.Text;
                var id = NumberFieldId.Number.ToString();
    
                if (!String.IsNullOrEmpty(value))
                {
                    Item t = new Item();
                    t.Id = id;
                    t.Text = value;
                    Store1.AddRecord(t);
                }
            }
        </script>
     <ext:ResourcePlaceHolder ID="ResourcePlaceHolder1" runat="server" Mode="Script" >       
    
        <script type="text/javascript" language="javascript">
            var AddItemJavaScript = function(value, id, store)
            {
                if (!Ext.isEmpty(value, false))
                {
                    var rec = store.getById(id);
                    if(rec){
                        store.remove(rec);
                    }
                    store.addRecord({ Id: id, Text: value });
                }
            }
        </script>
    </ext:ResourcePlaceHolder>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <ext:ResourceManager ID="ResourceManager1" runat="server" />
        
            <ext:Store ID="Store1" runat="server" AutoLoad="true" ShowWarningOnFailure="true">
                <Proxy>
                    <ext:PageProxy />
                </Proxy>
                <Reader>
                    <ext:JsonReader IDProperty="Id">
                        <Fields>
                            <ext:RecordField Name="Id" Mapping="Id" />
                        </Fields>
                    </ext:JsonReader>
                </Reader>
                <DirectEventConfig Timeout="120000" />
                <Listeners>
                    <LoadException Handler="Ext.MessageBox.alert('Load failed', response.statusText);" />
                </Listeners>            
            </ext:Store>
            <ext:FormPanel ID="BasicPanel" runat="server" Layout="Row" Width="500">
                <Items>
                    <ext:GridPanel ID="GridPanel1" runat="server" StripeRows="true" Title="Add Test"
                        StoreID="Store1" Width="600" Height="350">
                        <ColumnModel runat="server">
                            <Columns>
                                <ext:Column ColumnID="Id" Header="Id" DataIndex="Id" />
                            </Columns>
                        </ColumnModel>
                        <View>
                        <ext:GridView Id="GridView" runat="server" />
                        </View>
                    </ext:GridPanel>
                    <ext:NumberField ID="NumberFieldId" runat="server" FieldLabel="Enter an id" Text="1" />
                    <ext:TextField ID="TextFieldItem" runat="server" FieldLabel="Enter value" />
                </Items>
                <Buttons>
                    <ext:Button ID="ButtonJavaScript" Text="Add via JavaScript" runat="server">
                        <Listeners>
                            <Click Handler="AddItemJavaScript(#{TextFieldItem}.getValue(),#{NumberFieldId}.getValue(), #{Store1});" />
                        </Listeners>
                    </ext:Button>
                    <ext:Button ID="ButtonDirectMethod" Text="Add via DirectMethod" runat="server">
                        <Listeners>
                            <Click Handler="if(!#{Store1}.getById(#{NumberFieldId}.getValue())){#{DirectMethods}.AddItemDirect();}" />
                        </Listeners>
                    </ext:Button>
                </Buttons>
            </ext:FormPanel>
        
    
        </form>
    </body>
    </html>

Similar Threads

  1. Replies: 0
    Last Post: May 03, 2012, 2:21 AM
  2. [CLOSED] PartialView to replace the contents of a div.
    By mattwoberts in forum 1.x Legacy Premium Help
    Replies: 3
    Last Post: Feb 22, 2011, 3:33 PM
  3. Replies: 0
    Last Post: Sep 22, 2010, 3:42 AM
  4. [CLOSED] Store item id property
    By daneel in forum 1.x Help
    Replies: 4
    Last Post: Mar 15, 2010, 2:18 PM
  5. [CLOSED] Item Count for Store - Server Side
    By JD in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Feb 02, 2010, 9:07 AM

Posting Permissions