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

radgrid custom filter template with clientside events disable another js events

1 Answer 68 Views
Grid
This is a migrated thread and some comments may be shown as answers.
archimede
Top achievements
Rank 1
archimede asked on 12 Dec 2012, 10:07 AM
Hi,
I create a server control that create programmatically a grid  with template columns, filter templates , ecc.
Evrithing works fine, but i noticed that when i introduced the MyFilterTemplate class to generate the filter items for any column, if the item (radcombobox, raddatapicker, ecc) include a clientside event then others controls outside the grid  doesn't work propertly.
For example i have a raddatepicker with a DatePopupButton visible outside the grid , after the page load if i click the popupbutton it shows the popup fine; but after an edit/insert of a value in the grid the popupbutton don't show the popup !.
So, my question is, how a programatically definition of a filter template column with clientside events may cause undesired operation of others controls..

This is the code of my filter template class... that as i said before it works perfectly on the grid.

private class MyFilterColumn : ITemplate
        {
            private Telerik.Web.UI.RadComboBox combo;
            private RadDatePicker _rdp;
            protected CommonParameters.GridTemplateColumnType type;
            protected string fieldvalue;
            protected string fieldtext;
 
 
            public MyFilterColumn(string Fieldvalue, string Fieldtext, CommonParameters.GridTemplateColumnType Type)
            {
                fieldvalue = Fieldvalue;
                fieldtext = Fieldtext;
                type = Type;               
            }
            public void InstantiateIn(Control container)
            {
                switch (type)
                {
                    case CommonParameters.GridTemplateColumnType.ComboOnDemand:
                        {
                            combo = new Telerik.Web.UI.RadComboBox();
                            combo.ID = String.Format("RadComboBox{0}", fieldtext);
                            combo.AppendDataBoundItems = true;
                            if (fieldvalue.Length > 0)
                                combo.DataTextField = fieldtext.Substring(fieldtext.IndexOf(".") + 1, (fieldtext.Length - (fieldtext.IndexOf(".") + 1)));
                            combo.DataValueField = fieldvalue;
                            combo.EmptyMessage = "niente";
                            combo.Items.Insert(0, new Telerik.Web.UI.RadComboBoxItem("Tutti"));
                            combo.Enabled = true;
                            combo.DataBound += combo_DataBound;
                            combo.DataBinding += new EventHandler(combo_DataBinding);
                            combo.OnClientSelectedIndexChanged = String.Format("ClientComboFilterSelected_{0}", fieldvalue);
                            container.Controls.Add(combo);
                        }
                        break;
                    case CommonParameters.GridTemplateColumnType.Date:
                        {
                            _rdp = new RadDatePicker();
                            _rdp.ID = "rdpf" + fieldvalue;
                            _rdp.Width = new System.Web.UI.WebControls.Unit(CommonParameters.RadDatePickerWidth);
                            _rdp.DbSelectedDate = _rdpf_DataBinding((GridItem)container.NamingContainer);
 
 
                            string script = "function ClientDataPickerFilterSelected_" + fieldvalue + "(sender,args) {var tableView=$find(\""
                            + ((GridItem)container.NamingContainer).OwnerTableView.ClientID + "\"); var date= FormatSelectedDate(sender);if (date != '') {  alert('data:' + date); tableView.filter(\""
                            + fieldvalue + "\",date,\"EqualTo\");} else { tableView.filter(\"" + fieldvalue + "\",date,\"NoFilter\");  }   }";
                            // tableView.filter(\"" + fieldvalue + "\" ,date,\"NoFilter\");
                            _rdp.ClientEvents.OnDateSelected = script;
 
                            container.Controls.Add(_rdp);
 
                        } break;
                }
            }
 
            DateTime? _rdpf_DataBinding(GridItem pGriditem)
            {
 
                if ((pGriditem).OwnerTableView.GetColumn(fieldvalue).CurrentFilterValue == string.Empty)
                {
                    return new DateTime?();
                }
                else
                {
                    return DateTime.Parse((pGriditem).OwnerTableView.GetColumn(fieldvalue).CurrentFilterValue);
                }
 
            }
 
            void combo_DataBinding(object sender, EventArgs e)
            {
                combo.DataSource = GetData();
            }
            public IList GetData()
            {
                IList mydata;
 
                using (DMWEntities ctx = new DMWEntities())
                {
                    mydata = (from c in ctx.Cli_for
                              orderby c.Denominazione
                              select new { IdFornitore = c.IdCLiFor, c.Denominazione }).ToList();
                }
                return mydata;
            }
 
            void combo_DataBound(object sender, EventArgs e)
            {
                Page page = HttpContext.Current.Handler as Page;
                Telerik.Web.UI.RadComboBox combo = (Telerik.Web.UI.RadComboBox)sender;
                GridItem container = (GridItem)combo.NamingContainer;
                string script = "function ClientComboFilterSelected_" + fieldvalue + "(sender,args) {var tableView=$find(\""
                    + ((GridItem)container).OwnerTableView.ClientID + "\");if (tableView)alert(args.get_item().get_value());tableView.filter(\""
                    + fieldvalue + "\",args.get_item().get_value(),\"EqualTo\");}";
                ScriptManager.RegisterStartupScript(page, page.GetType(), String.Format("ClientComboFilterSelected_{0}", fieldvalue), script, true);
                combo.SelectedValue = container.OwnerTableView.GetColumn(fieldvalue).CurrentFilterValue;
            }
        }

1 Answer, 1 is accepted

Sort by
0
Maria Ilieva
Telerik team
answered on 17 Dec 2012, 03:03 PM
Hi Francesco,

Could you please inspect your request when trying to open the Calendar component for second time and verify if any js errors appear on the page?

Kind regards,
Maria Ilieva
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
Tags
Grid
Asked by
archimede
Top achievements
Rank 1
Answers by
Maria Ilieva
Telerik team
Share this question
or