[CLOSED] Grid Filters Dynamic

  1. #1

    [CLOSED] Grid Filters Dynamic

    How can I dynamically create the filters functions that are within the
    by codbehind.

    <ext:XScript runat="server">
            <script type="text/javascript">
                             
                var applyFilter = function (field) {
                    if(field){
                        var id = field.id,
                            task = new Ext.util.DelayedTask(function(){
                                var f = Ext.getCmp(id);
                                f.focus();
                                f.el.dom.value = f.el.dom.value;
                            });
                        task.delay(100);
                    }
                    #{GridPanel1}.getStore().filterBy(getRecordFilter());                                
                };
                 
                var clearFilter = function () {
                    #{ComboBox1}.reset();
                    #{PriceFilter}.reset();
                    #{ChangeFilter}.reset();
                    #{PctChangeFilter}.reset();
                    #{LastChangeFilter}.reset();
                     
                    #{GridPanel1}.getStore().clearFilter();
                }
     
                var filterString = function (value, dataIndex, record) {
                    var val = record.get(dataIndex);
                    if (typeof val != "string") {
                        return value.length == 0;
                    }
                    return val.toLowerCase().indexOf(value.toLowerCase()) > -1;
                };
     
                var filterDate = function (value, dataIndex, record) {
                    var val = record.get(dataIndex).clearTime(true).getTime();
     
                    if (!Ext.isEmpty(value, false) && val != value.clearTime(true).getTime()) {
                        return false;
                    }
                    return true;
                };
     
                var filterNumber = function (value, dataIndex, record) {
                    var val = record.get(dataIndex);                
     
                    if (!Ext.isEmpty(value, false) && val != value) {
                        return false;
                    }
                    return true;
                };
     
                var getRecordFilter = function () {
                    var f = [];
     
                    f.push({
                        filter: function (record) {                         
                            return filterString(#{ComboBox1}.getValue(), 'company', record);
                        }
                    });
                     
                    f.push({
                        filter: function (record) {                         
                            return filterNumber(#{PriceFilter}.getValue(), 'price', record);
                        }
                    });
                     
                    f.push({
                        filter: function (record) {                         
                            return filterNumber(#{ChangeFilter}.getValue(), 'change', record);
                        }
                    });
                     
                    f.push({
                        filter: function (record) {                         
                            return filterNumber(#{PctChangeFilter}.getValue(), 'pctChange', record);
                        }
                    });
                     
                    f.push({
                        filter: function (record) {                         
                            return filterDate(#{LastChangeFilter}.getValue(), 'lastChange', record);
                        }
                    });
     
                    var len = f.length;
                     
                    return function (record) {
                        for (var i = 0; i < len; i++) {
                            if (!f[i].filter(record)) {
                                return false;
                            }
                        }
                        return true;
                    };
                };
            </script>
        </ext:XScript>
    Last edited by Daniil; Apr 25, 2011 at 8:09 AM. Reason: [CLOSED]
  2. #2
    Hi,

    Just generate required script (as simple text) and register it
    Please see the following article
    http://msdn.microsoft.com/en-us/library/ms178207.aspx
  3. #3
    Quote Originally Posted by Vladimir View Post
    Hi,

    Just generate required script (as simple text) and register it
    Please see the following article
    http://msdn.microsoft.com/en-us/library/ms178207.aspx
    Do you have a simple example of how to build a dynamic filter?
  4. #4
    I can demonstrate how to dynamically create a button with script.

    Example
    <%@ Page Language="C#" %>
    
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    
    <script runat="server">
        protected void AddButton(object sender, DirectEventArgs e)
        {
            string script = "function onClick() { alert('Hello!'); }";
            ResourceManager.GetInstance().RegisterClientScriptBlock("someKey", script);
    
            Ext.Net.Button b = new Ext.Net.Button()
            {
                Text = "Dynamically created button with dynamically registered JavaScript",
                Listeners =
                {
                    Click =
                    {
                        Fn = "onClick"
                    }
                }
            };
    
            b.AddTo(this.Form);
        }
    </script>
    
    <!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>Ext.Net Example</title>
    </head>
    <body>
        <form runat="server">
        <ext:ResourceManager runat="server" />
        <ext:Button runat="server" Text="Add a button" OnDirectClick="AddButton" />
        </form>
    </body>
    </html>
    But, unfortunately, MultiHeader doesn't support adding columns on the fly.

    So, if you need to add a column/filter on the fly you have to re-render a whole GridPanel.

Similar Threads

  1. Replies: 3
    Last Post: Jan 12, 2012, 3:26 PM
  2. [CLOSED] Hidden Change and Grid Filters are not working after Grid Reconfigure
    By speedstepmem3 in forum 1.x Legacy Premium Help
    Replies: 15
    Last Post: Oct 16, 2011, 1:12 PM
  3. Replies: 16
    Last Post: Feb 23, 2011, 10:03 AM
  4. Dynamic Filters not showing...
    By rthiney in forum 1.x Help
    Replies: 1
    Last Post: Nov 18, 2009, 6:31 PM
  5. Grid filters in code-behind
    By petlun in forum 1.x Help
    Replies: 4
    Last Post: Jan 01, 2009, 2:40 PM

Posting Permissions