GridPanel Paging and Search

  1. #1

    GridPanel Paging and Search

    Hi,

    I have a large set of data in SQL (500k+) which I want to be able to search and edit using the GridPanel.
    So far I have been able to get it to search but it is incredibly slow and usually results in a crash.

    Is there a way to page the data but still be able to search the whole set?

    Also, it seems I am unable to have both the search results and the paging icons in the bottom bar as it seems you can only use one or the other. Is there a way around this?

    Thanks,
    Hixxey
  2. #2
    I think what I need is something similar to this example.
    https://examples2.ext.net/#/GridPane...Remote_Filter/

    However, this doesn't seem to work with adding and editing records. Is there a similar solution or should this work?
  3. #3
    Hi @Hixxey,

    Welcome to the Ext.NET forums!

    I have a large set of data in SQL (500k+)
    Do you load those 500k+ records to a browser at once? It might be too heavy for a browser.

    So far I have been able to get it to search but it is incredibly slow and usually results in a crash.
    You are searching via JavaScript across 500k+ records? Well, yes, it might take time. Also it depends on the JavaScript code that you use. Maybe, there is a room to optimize it. Though, still I would say the main problem is too many records on client. And you are on the right way as you found a remote approach. I mean the example that you have mentioned.

    However, this doesn't seem to work with adding and editing records.
    Please elaborate on that.
  4. #4
    Please elaborate on that.
    Sorry for the late reply.

    I have used this search example with this example of inserting data.

    They both work well together but when I introduce the remote filter the searching and SQL commands seem to produce an empty grid that doesn't refresh.

    Here is the code I'm using.

    <%@ Page Language="C#" %>
    
    <%@ Import Namespace="System.Xml" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }
    
        private bool cancel;
        private string message;
        private int? insertedValue;
    
        protected void Store1_BeforeRecordInserted(object sender, BeforeRecordInsertedEventArgs e)
        {
        
        }
    
        protected void Store1_AfterRecordInserted(object sender, AfterRecordInsertedEventArgs e)
        {
            if (insertedValue.HasValue)
            {
                e.Keys.Add("record_id", insertedValue.Value);
                insertedValue = null;
            }
        }
    
        protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
        {
            if(e.AffectedRows > 0 && e.Command.Parameters["@newId"].Value != null)
            { 
                insertedValue = (int)e.Command.Parameters["@newId"].Value;
            }
            else
            {
                insertedValue = null;
            }
        }
    
        protected void Store1_AfterDirectEvent(object sender, AfterDirectEventArgs e)
        {
            if (e.Response.Success)
            {
                // set to .Success to false if we want to return a failure
                e.Response.Success = !cancel;
                e.Response.Message = message;           
            }
        }
    
        protected void Store1_Refresh(object sender, StoreReadDataEventArgs e)
        {
            Store store = this.GridPanel1.GetStore();
            store.DataBind();
        }
    
        protected void Store1_BeforeDirectEvent(object sender, BeforeDirectEventArgs e)
        {
            
        }
    </script>
        <link href="/resources/css/examples.css" rel="stylesheet" />    
    
        <style>
            .x-grid-row-over .x-grid-cell-inner {
                font-weight : bold;
            }
    
            .x-yellow-highlight
            {
                background-color: yellow;
            }
        </style>
        <script>
            var template = '<span style="color:{0};">{1}</span>';
    
            var change = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value);
            };
    
            var pctChange = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value + "%");
            };
        </script>
    
    <!DOCTYPE html>
    
    <html>
    <head id="Head1" runat="server">
        <title>TPS List</title>
    </head>
    <body>
        <form id="Form1" runat="server">
            <ext:ResourceManager ID="ResourceManager1" runat="server" />
            
            <asp:SqlDataSource 
                ID="SqlDataSource1" 
                runat="server" 
                ConnectionString="<%$ ConnectionStrings:databaseConnection %>"
                DeleteCommand="DELETE FROM tps WHERE (record_id = @record_id)"
                InsertCommand="INSERT INTO tps 
                                   (number) 
                                VALUES 
                                    (@number);                         
                                SELECT @newId = @@Identity;"
                                
                SelectCommand="SELECT 
                                    record_id, 
                                    number,
                                    CONVERT(VARCHAR(19),date_entered) [date_entered],
                                    CONVERT(VARCHAR(19),date_removed) [date_removed],
                                    active                
                               FROM tps"
                               
                UpdateCommand="UPDATE tps SET 
                                    number = @number,
                                    last_modified_date = GETDATE(),
                                    --only show a removed date if active is unticked and it was previously set to true in the database
                                    date_removed = (CASE WHEN @active = 'false' AND active = 'true' THEN GETDATE() ELSE NULL END),
                                    active = @active
                               WHERE (record_id = @record_id)"
                               
                OnInserted="SqlDataSource1_Inserted">
                
                <DeleteParameters>
                    <asp:Parameter Name="record_id" Type="Int32" />
                </DeleteParameters>
                
                <UpdateParameters>
                    <asp:Parameter Name="number" Type="String" />
                    <asp:Parameter Name="record_id" Type="Int32" />
                </UpdateParameters>
                
                <InsertParameters>
                    <asp:Parameter Name="number" Type="String" />
                    <asp:Parameter Direction="Output" Name="newId" Type="Int32" />
                </InsertParameters>
            </asp:SqlDataSource>
            
            <ext:Store 
                ID="Store1" 
                runat="server" 
                Buffered="true"
                RemoteFilter="true"
                LeadingBufferZone="100" 
                PageSize="50"
                DataSourceID="SqlDataSource1" 
                ShowWarningOnFailure="false"
                OnAfterDirectEvent="Store1_AfterDirectEvent"
                OnBeforeDirectEvent="Store1_BeforeDirectEvent" 
                OnBeforeRecordInserted="Store1_BeforeRecordInserted"
                OnAfterRecordInserted="Store1_AfterRecordInserted"
                OnReadData="Store1_Refresh">
                <Proxy>
                    <ext:PageProxy />
                </Proxy>
                <Model>
                    <ext:Model ID="Model1" runat="server" IDProperty="record_id" Name="Supplier">
                        <Fields>
                            <ext:ModelField Name="record_id" Type="Int" />
                            <ext:ModelField Name="number" />
                            <ext:ModelField Name="date_entered" />
                            <ext:ModelField Name="date_removed" />
                            <ext:ModelField Name="active" />
                        </Fields>
                    </ext:Model>
                </Model>
                <Sorters>
                    <ext:DataSorter Property="number" Direction="ASC" />
                </Sorters> 
                <Listeners>
                    <Exception Handler="Ext.Msg.alert('Operation failed', operation.getError());" />                
                    <Write Handler="Ext.Msg.alert('Write', 'The data successfully saved');" />
                </Listeners>
            </ext:Store>
            
            <ext:Viewport ID="Viewport1" runat="server" Layout="BorderLayout">
                <Items>
                    <ext:Panel ID="Panel2" runat="server" Region="Center" Height="300" Header="false" Layout="Fit" MarginsSummary="0 5 0 5">
                        <Items>
                            <ext:GridPanel ID="GridPanel1" runat="server" Title="TPS List" StoreID="Store1" Border="false" Icon="Phone">
                                <ColumnModel ID="ColumnModel1" runat="server">
                                    <Columns>
                                        <ext:Column ID="colNumber" runat="server" DataIndex="number" Text="Number" Flex="1" >
                                            <Editor>
                                                <ext:NumberField ID="NumberField1" runat="server" />
                                            </Editor>
                                        </ext:Column>
                                        <ext:Column ID="colDateEntered" runat="server" DataIndex="date_entered" Text="Date Added" Flex="1" />
                                        <ext:Column ID="colDateRemoved" runat="server" DataIndex="date_removed" Text="Date Removed" Flex="1" />
                                        <ext:CheckColumn ID="chkActive" runat="server" DataIndex="active" Header="Active" Width="50" Sortable="true" Editable="true" />             
                                    </Columns>
                                </ColumnModel>
                                <TopBar>
                                    <ext:LiveSearchToolbar ID="LiveSearchToolbar1" runat="server" HideRegExp="true" HideCaseSensitive="true" />
                                </TopBar>
                                <BottomBar>
                                    <ext:StatusBar ID="StatusBar1" runat="server" DefaultText="Nothing Found" />
                                </BottomBar>
                                <SelectionModel>
                                    <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi" />
                                </SelectionModel>
                                <Plugins>
                                    <ext:CellEditing ID="CellEditing1" runat="server" />
                                    <ext:LiveSearchGridPanel runat="server">
                                        <Listeners>
                                            <RegExpError Handler="#{StatusBar1}.setStatus({text: message, iconCls: 'x-status-error'});" />
                                            <BeforeSearch Handler="#{StatusBar1}.setStatus({text: 'Nothing Found', iconCls: ''});" />
                                            <Search Handler="if(count>0){#{StatusBar1}.setStatus({text: count + ' matche(s) found.', iconCls: 'x-status-valid'});}" />
                                        </Listeners>
                                    </ext:LiveSearchGridPanel>
                                </Plugins>
                            </ext:GridPanel>
                        </Items>
                        <Buttons>
                            <ext:Button ID="btnSave" runat="server"  Text="Sync" Icon="Disk" >
                                <Listeners>
                                    <Click Handler="#{Store1}.sync();" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnDelete" runat="server"  Text="Delete selected records" Icon="Delete">
                                <Listeners>
                                    <Click Handler="#{GridPanel1}.deleteSelected();" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnInsert" runat="server"  Text="Insert" Icon="Add">
                                <Listeners>
                                    <Click Handler="#{Store1}.insert(0, new Supplier());#{GridPanel1}.editingPlugin.startEditByPosition({row:0, column:0});" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnRefresh" runat="server"  Text="Refresh" Icon="ArrowRefresh">
                                <Listeners>
                                    <Click Handler="#{Store1}.reload({params:{EmulateError: 0}});" />
                                </Listeners>
                            </ext:Button>                     
                        </Buttons>
                    </ext:Panel>
                </Items>
            </ext:Viewport>
        </form>
    </body>
    </html>
  5. #5
    I've modified my code slightly so it uses paging but I'm still struggling to get it to search too.
    It would be perfect if I was able to search all the pages so the returned search results could be edited. Is this possible?

    Is there a way to make the search change the SQL select statement? That way I could refresh the results based on the where clause and update that way.

    The code as it stands:

    <%@ Page Language="C#" %>
    
    <%@ Import Namespace="System.Xml" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }
    
        private bool cancel;
        private string message;
        private int? insertedValue;
    
        protected void Store1_BeforeRecordInserted(object sender, BeforeRecordInsertedEventArgs e)
        {
        
        }
    
        protected void Store1_AfterRecordInserted(object sender, AfterRecordInsertedEventArgs e)
        {
            if (insertedValue.HasValue)
            {
                e.Keys.Add("record_id", insertedValue.Value);
                insertedValue = null;
            }
        }
    
        protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
        {
            if(e.AffectedRows > 0 && e.Command.Parameters["@newId"].Value != null)
            { 
                insertedValue = (int)e.Command.Parameters["@newId"].Value;
            }
            else
            {
                insertedValue = null;
            }
        }
    
        protected void Store1_AfterDirectEvent(object sender, AfterDirectEventArgs e)
        {
            if (e.Response.Success)
            {
                // set to .Success to false if we want to return a failure
                e.Response.Success = !cancel;
                e.Response.Message = message;           
            }
        }
    
        protected void Store1_Refresh(object sender, StoreReadDataEventArgs e)
        {
            Store store = this.GridPanel1.GetStore();
            store.DataBind();
        }
    
        protected void Store1_BeforeDirectEvent(object sender, BeforeDirectEventArgs e)
        {
            
        }
    </script>
        <link href="/resources/css/examples.css" rel="stylesheet" />    
    
        <style>
            .x-grid-row-over .x-grid-cell-inner {
                font-weight : bold;
            }
    
            .x-yellow-highlight
            {
                background-color: yellow;
            }
        </style>
        <script>
            var template = '<span style="color:{0};">{1}</span>';
    
            var change = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value);
            };
    
            var pctChange = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value + "%");
            };
        </script>
    
    <!DOCTYPE html>
    
    <html>
    <head id="Head1" runat="server">
        <title>TPS List</title>
    </head>
    <body>
        <form id="Form1" runat="server">
            <ext:ResourceManager ID="ResourceManager1" runat="server" />
            
            <asp:SqlDataSource 
                ID="SqlDataSource1" 
                runat="server" 
                ConnectionString="<%$ ConnectionStrings:databaseConnection %>"
                DeleteCommand="DELETE FROM tps WHERE (record_id = @record_id)"
                InsertCommand="INSERT INTO tps 
                                   (number) 
                                VALUES 
                                    (@number);                         
                                SELECT @newId = @@Identity;"
                                
                SelectCommand="SELECT 
                                    record_id, 
                                    number,
                                    CONVERT(VARCHAR(19),date_entered) [date_entered],
                                    CONVERT(VARCHAR(19),date_removed) [date_removed],
                                    active                
                               FROM tps
                               ORDER BY date_entered DESC"
                               
                UpdateCommand="UPDATE tps SET 
                                    number = @number,
                                    last_modified_date = GETDATE(),
                                    --only show a removed date if active is unticked and it was previously set to true in the database
                                    date_removed = (CASE WHEN @active = 'false' AND active = 'true' THEN GETDATE() ELSE NULL END),
                                    active = @active
                               WHERE (record_id = @record_id)"
                               
                OnInserted="SqlDataSource1_Inserted">
                
                <DeleteParameters>
                    <asp:Parameter Name="record_id" Type="Int32" />
                </DeleteParameters>
                
                <UpdateParameters>
                    <asp:Parameter Name="number" Type="String" />
                    <asp:Parameter Name="record_id" Type="Int32" />
                </UpdateParameters>
                
                <InsertParameters>
                    <asp:Parameter Name="number" Type="String" />
                    <asp:Parameter Direction="Output" Name="newId" Type="Int32" />
                </InsertParameters>
            </asp:SqlDataSource>
            
            <ext:Store 
                ID="Store1" 
                runat="server"
                DataSourceID="SqlDataSource1" 
                ShowWarningOnFailure="false"
                OnAfterDirectEvent="Store1_AfterDirectEvent"
                OnBeforeDirectEvent="Store1_BeforeDirectEvent" 
                OnBeforeRecordInserted="Store1_BeforeRecordInserted"
                OnAfterRecordInserted="Store1_AfterRecordInserted"
                OnReadData="Store1_Refresh"
                AutoLoad="true"
                RemotePaging="false"
                PageSize="50">
                <Proxy>
                    <ext:PageProxy />
                </Proxy>
                <Model>
                    <ext:Model ID="Model1" runat="server" IDProperty="record_id" Name="Supplier">
                        <Fields>
                            <ext:ModelField Name="record_id" Type="Int" />
                            <ext:ModelField Name="number" />
                            <ext:ModelField Name="date_entered" />
                            <ext:ModelField Name="date_removed" />
                            <ext:ModelField Name="active" />
                        </Fields>
                    </ext:Model>
                </Model>
                <Sorters>
                    <ext:DataSorter Property="number" Direction="ASC" />
                </Sorters> 
                <Listeners>
                    <Exception Handler="Ext.Msg.alert('Operation failed', operation.getError());" />                
                    <Write Handler="Ext.Msg.alert('Write', 'The data successfully saved');" />
                </Listeners>
            </ext:Store>
            
            <ext:Viewport ID="Viewport1" runat="server" Layout="BorderLayout">
                <Items>
                    <ext:Panel ID="Panel2" runat="server" Region="Center" Height="300" Header="false" Layout="Fit" MarginsSummary="0 5 0 5">
                        <Items>
                            <ext:GridPanel ID="GridPanel1" runat="server" Title="TPS List" StoreID="Store1" Border="false" Icon="Phone">
                                <ColumnModel ID="ColumnModel1" runat="server">
                                    <Columns>
                                        <ext:Column ID="colNumber" runat="server" DataIndex="number" Text="Number" Flex="1" >
                                            <Editor>
                                                <ext:NumberField ID="NumberField1" runat="server" />
                                            </Editor>
                                        </ext:Column>
                                        <ext:Column ID="colDateEntered" runat="server" DataIndex="date_entered" Text="Date Added" Flex="1" />
                                        <ext:Column ID="colDateRemoved" runat="server" DataIndex="date_removed" Text="Date Removed" Flex="1" />
                                        <ext:CheckColumn ID="chkActive" runat="server" DataIndex="active" Header="Active" Width="50" Sortable="true" Editable="true" />             
                                    </Columns>
                                </ColumnModel>
                                <TopBar>
                                    <ext:LiveSearchToolbar ID="LiveSearchToolbar1" runat="server" HideRegExp="true" HideCaseSensitive="true" />
                                </TopBar>
                                 <BottomBar>
                                    <ext:PagingToolbar ID="PagingToolbar1" runat="server" />
                                </BottomBar>
                                <SelectionModel>
                                    <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" Mode="Multi" />
                                </SelectionModel>
                                <Plugins>
                                    <ext:CellEditing ID="CellEditing1" runat="server" />
                                    <ext:LiveSearchGridPanel runat="server">
                                        <Listeners>
                                            <RegExpError Handler="#{StatusBar1}.setStatus({text: message, iconCls: 'x-status-error'});" />
                                            <BeforeSearch Handler="#{StatusBar1}.setStatus({text: 'Nothing Found', iconCls: ''});" />
                                            <Search Handler="if(count>0){#{StatusBar1}.setStatus({text: count + ' matche(s) found.', iconCls: 'x-status-valid'});}" />
                                        </Listeners>
                                    </ext:LiveSearchGridPanel>
                                </Plugins>
                            </ext:GridPanel>
                        </Items>
                        <Buttons>
                            <ext:Button ID="btnSave" runat="server"  Text="Sync" Icon="Disk" >
                                <Listeners>
                                    <Click Handler="#{Store1}.sync();" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnDelete" runat="server"  Text="Delete selected records" Icon="Delete">
                                <Listeners>
                                    <Click Handler="#{GridPanel1}.deleteSelected();" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnInsert" runat="server"  Text="Insert" Icon="Add">
                                <Listeners>
                                    <Click Handler="#{Store1}.insert(0, new Supplier());#{GridPanel1}.editingPlugin.startEditByPosition({row:0, column:0});" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnRefresh" runat="server"  Text="Refresh" Icon="ArrowRefresh">
                                <Listeners>
                                    <Click Handler="#{Store1}.reload({params:{EmulateError: 0}});" />
                                </Listeners>
                            </ext:Button>                     
                        </Buttons>
                    </ext:Panel>
                </Items>
            </ext:Viewport>
        </form>
    </body>
    </html>
  6. #6
    A LiveSearchGridPanel searches in the actual HTML rendered by a GridPanel. It doesn't deal with a Store at all. So, it cannot be used to filter the data remotely.

    You could use a regular TextField, listen to its Change event and reload a Store with a search text parameter.

    This example demonstrates an approach to deal with parameters.
    http://forums.ext.net/showthread.php...ll=1#post57909
  7. #7
    Thanks again for the reply.

    I feel we may be getting close now but I'm still not returning any results.
    I noticed that your selection row selection model uses RowSelect but that seems to error for me. I've changed it to Select.

    Can you see anything wrong with my code below? It's not currently wired up to the text box but if I wanted to simply return a test (all numbers with 788 in them) how would I got about this?


    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Xml" %>
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">
    
        private bool cancel;
        private string message;
        private int? insertedValue;
    
        protected void Store1_BeforeRecordInserted(object sender, BeforeRecordInsertedEventArgs e)
        {
        
        }
    
        protected void Store1_AfterRecordInserted(object sender, AfterRecordInsertedEventArgs e)
        {
            if (insertedValue.HasValue)
            {
                e.Keys.Add("record_id", insertedValue.Value);
                insertedValue = null;
            }
        }
    
        protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
        {
            if(e.AffectedRows > 0 && e.Command.Parameters["@newId"].Value != null)
            { 
                insertedValue = (int)e.Command.Parameters["@newId"].Value;
            }
            else
            {
                insertedValue = null;
            }
        }
    
        protected void Store1_AfterDirectEvent(object sender, AfterDirectEventArgs e)
        {
            if (e.Response.Success)
            {
                // set to .Success to false if we want to return a failure
                e.Response.Success = !cancel;
                e.Response.Message = message;           
            }
        }
    
        protected void Store1_Refresh(object sender, StoreReadDataEventArgs e)
        {
            Store store = this.GridPanel1.GetStore();
            store.DataBind();
        }
    
        protected void Store1_BeforeDirectEvent(object sender, BeforeDirectEventArgs e)
        {
            
        }
    </script>
        <link href="/resources/css/examples.css" rel="stylesheet" />
    
        <script>
            var template = '<span style="color:{0};">{1}</span>';
    
            var change = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value);
            };
    
            var pctChange = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value + "%");
            };
        </script>
    
    <!DOCTYPE html>
    
    <html>
    <head id="Head1" runat="server">
        <title>TPS List</title>
    </head>
    <body>
        <form id="Form1" runat="server">
            <ext:ResourceManager ID="ResourceManager1" runat="server" />
    
            <ext:Hidden ID="ProjectGridProjectIdValue" runat="server" Text="0" />
    
            <asp:SqlDataSource 
                ID="SqlDataSource1" 
                runat="server" 
                ConnectionString="<%$ ConnectionStrings:databaseConnection %>"
                DeleteCommand="DELETE FROM tps WHERE (record_id = @record_id)"
                InsertCommand="INSERT INTO tps 
                                   (number) 
                                VALUES 
                                    (@number);                         
                                SELECT @newId = @@Identity;"
                                
                SelectCommand="SELECT 
                                    record_id, 
                                    number,
                                    CONVERT(VARCHAR(19),date_entered) [date_entered],
                                    CONVERT(VARCHAR(19),date_removed) [date_removed],
                                    active                
                               FROM tps
                               ORDER BY date_entered DESC"
                               
                UpdateCommand="UPDATE tps SET 
                                    number = @number,
                                    last_modified_date = GETDATE(),
                                    --only show a removed date if active is unticked and it was previously set to true in the database
                                    date_removed = (CASE WHEN @active = 'false' AND active = 'true' THEN GETDATE() ELSE NULL END),
                                    active = @active
                               WHERE (record_id = @record_id)"
                               
                OnInserted="SqlDataSource1_Inserted"
    
                FilterExpression="number='{0}'" >
                <FilterParameters>
                    <asp:ControlParameter Name="number" ControlId="ProjectGridProjectIdValue" DefaultValue="0" />
                </FilterParameters>
                
                <DeleteParameters>
                    <asp:Parameter Name="record_id" Type="Int32" />
                </DeleteParameters>
                
                <UpdateParameters>
                    <asp:Parameter Name="number" Type="String" />
                    <asp:Parameter Name="record_id" Type="Int32" />
                </UpdateParameters>
                
                <InsertParameters>
                    <asp:Parameter Name="number" Type="String" />
                    <asp:Parameter Direction="Output" Name="newId" Type="Int32" />
                </InsertParameters>
            </asp:SqlDataSource>
            
            <ext:Store 
                ID="Store1" 
                runat="server"
                DataSourceID="SqlDataSource1" 
                ShowWarningOnFailure="false"
                OnAfterDirectEvent="Store1_AfterDirectEvent"
                OnBeforeDirectEvent="Store1_BeforeDirectEvent" 
                OnBeforeRecordInserted="Store1_BeforeRecordInserted"
                OnAfterRecordInserted="Store1_AfterRecordInserted"
                OnReadData="Store1_Refresh"
                AutoLoad="true"
                RemotePaging="false"
                PageSize="50">
                <Proxy>
                    <ext:PageProxy />
                </Proxy>
                <Model>
                    <ext:Model ID="Model1" runat="server" IDProperty="record_id" Name="Supplier">
                        <Fields>
                            <ext:ModelField Name="record_id" Type="Int" />
                            <ext:ModelField Name="number" />
                            <ext:ModelField Name="date_entered" />
                            <ext:ModelField Name="date_removed" />
                            <ext:ModelField Name="active" />
                        </Fields>
                    </ext:Model>
                </Model>
                <Sorters>
                    <ext:DataSorter Property="number" Direction="ASC" />
                </Sorters> 
                <Listeners>
                    <Exception Handler="Ext.Msg.alert('Operation failed', operation.getError());" />                
                    <Write Handler="Ext.Msg.alert('Write', 'The data successfully saved');" />
                </Listeners>
            </ext:Store>
            
            <ext:Viewport ID="Viewport1" runat="server" Layout="BorderLayout">
                <Items>
                    <ext:Panel ID="Panel2" runat="server" Region="Center" Height="300" Header="false" Layout="Fit" MarginsSummary="0 5 0 5">
                        <Items>
                            <ext:GridPanel ID="GridPanel1" runat="server" Title="TPS List" StoreID="Store1" Border="false" Icon="Phone">
                                <ColumnModel ID="ColumnModel1" runat="server">
                                    <Columns>
                                        <ext:Column ID="colNumber" runat="server" DataIndex="number" Text="Number" Flex="1" >
                                            <Editor>
                                                <ext:NumberField ID="NumberField1" runat="server" />
                                            </Editor>
                                        </ext:Column>
                                        <ext:Column ID="colDateEntered" runat="server" DataIndex="date_entered" Text="Date Added" Flex="1" />
                                        <ext:Column ID="colDateRemoved" runat="server" DataIndex="date_removed" Text="Date Removed" Flex="1" />
                                        <ext:CheckColumn ID="chkActive" runat="server" DataIndex="active" Header="Active" Width="50" Sortable="true" Editable="true" />             
                                    </Columns>
                                </ColumnModel>
                                <TopBar>
                                    <ext:Toolbar runat="server">
                                        <Items>
                                            <ext:TextField runat="server" ></ext:TextField>
                                            <ext:Button runat="server" Text="Filter" ></ext:Button>
                                        </Items>
                                    </ext:Toolbar>
                                </TopBar>
                                 <BottomBar>
                                    <ext:PagingToolbar ID="PagingToolbar1" runat="server" />
                                </BottomBar>
                                    <SelectionModel>
                                        <ext:RowSelectionModel ID="ProjectRowSelectionModel" runat="server">
                                            <Listeners>
                                                <Select Handler="#{ProjectGridProjectIdValue}.setValue(#{GridPanel1}.store.getAt(#{GridPanel1}.store.indexOf(#{GridPanel1}.getSelectionModel().getSelected())).get('number'));#{Store1}.reload();"  Buffer="250" />
                                            </Listeners>
                                        </ext:RowSelectionModel>
                                    </SelectionModel>
                                <Plugins>
                                    <ext:CellEditing ID="CellEditing1" runat="server" />
                                </Plugins>
                            </ext:GridPanel>
                        </Items>
                        <Buttons>
                            <ext:Button ID="btnSave" runat="server"  Text="Sync" Icon="Disk" >
                                <Listeners>
                                    <Click Handler="#{Store1}.sync();" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnDelete" runat="server"  Text="Delete selected records" Icon="Delete">
                                <Listeners>
                                    <Click Handler="#{GridPanel1}.deleteSelected();" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnInsert" runat="server"  Text="Insert" Icon="Add">
                                <Listeners>
                                    <Click Handler="#{Store1}.insert(0, new Supplier());#{GridPanel1}.editingPlugin.startEditByPosition({row:0, column:0});" />
                                </Listeners>
                            </ext:Button>
                            <ext:Button ID="btnRefresh" runat="server"  Text="Refresh" Icon="ArrowRefresh">
                                <Listeners>
                                    <Click Handler="#{Store1}.reload({params:{EmulateError: 0}});" />
                                </Listeners>
                            </ext:Button>                     
                        </Buttons>
                    </ext:Panel>
                </Items>
            </ext:Viewport>
        </form>
    </body>
    </html>
  8. #8
    Ah I see! The ext hidden is what feeds the value. So I guess the next step is to feed the value from the text field into the Store.

    EDIT:

    For anyone interested I have got the page working now by adding a listener to the filter button in the same way the refresh button works.

                                            <ext:TextField ID="ProjectGridProjectIdValue" runat="server" Text="" ></ext:TextField>
                                            <ext:Button runat="server" Text="Filter" >
                                            <Listeners>
                                                <Click Handler="#{Store1}.reload({params:{EmulateError: 0}});" />
                                            </Listeners>
                                            </ext:Button>
    Thanks for the help Daniil, I think I have a lot to learn :)
    Last edited by Hixxey; Jul 29, 2014 at 9:20 PM.
  9. #9
    Just FYI. there is another approach to send additional parameters with a load request.
    <ext:TextField ID="TextField1" runat="server" Text="Test" />
    <ext:Store runat="server">
        <Parameters>
            <ext:StoreParameter Name="filterString" Value="App.TextField1.getValue()" Mode="Raw" />
        </Parameters>
    </ext:Store>
    In this case an additional parameter is being sent on each request.

Similar Threads

  1. Replies: 3
    Last Post: May 23, 2014, 5:14 AM
  2. Paging in ComboBox Search - Razor
    By dangerlinto in forum 2.x Help
    Replies: 6
    Last Post: Dec 18, 2013, 5:31 PM
  3. Paging in Live Search Combo...
    By kabalkunz in forum 1.x Help
    Replies: 2
    Last Post: Oct 27, 2011, 3:04 PM
  4. [CLOSED] Custom Search ComboBox with Paging
    By bethc in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: Oct 29, 2009, 10:40 AM
  5. Disable paging in custom search
    By helmishariff in forum 1.x Help
    Replies: 2
    Last Post: Aug 19, 2009, 12:07 PM

Tags for this Thread

Posting Permissions