XAF_Bootstrap.Controls.XafBootstrapTagSelector.Handler_OnCallback C# (CSharp) Method

Handler_OnCallback() protected method

protected Handler_OnCallback ( object source, DevExpress e ) : void
source object
e DevExpress
return void
        protected void Handler_OnCallback(object source, DevExpress.Web.CallbackEventArgs e)
        {
            String[] values = String.Concat(e.Parameter).Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
            if (values.Count() > 1)
            {
                switch (values[0])
                {
                    case "NewValue":
                        var newValues = values[1].Split(new String[] { Delimeter }, StringSplitOptions.RemoveEmptyEntries);
                        int id;
                        var oldValues = String.Concat(Value).Split(new String[] { Delimeter }, StringSplitOptions.RemoveEmptyEntries).ToList();
                        foreach (var item in newValues)
                        {
                            if (int.TryParse(item, out id))
                            {
                                var SelectedItem = Items.List[id];
                                if (oldValues.IndexOf(SelectedItem.Value) == -1)
                                    oldValues.Add(SelectedItem.Value);
                            }
                        }
                        Value = String.Join(Delimeter, oldValues);
                        break;
                    case "AddValue":
                        newValues = values[1].Split(new String[] { Delimeter }, StringSplitOptions.RemoveEmptyEntries);
                        foreach(var item in newValues)
                            if (Items.List.Where(f => f.Value == item).Count() == 0) {
                                var newItem = Items.Add();
                                newItem.Text = newItem.Value = item;
                            }

                        oldValues = String.Concat(Value).Split(new String[] { Delimeter }, StringSplitOptions.RemoveEmptyEntries).ToList();
                        foreach (var item in newValues)
                            if (oldValues.IndexOf(item) == -1)
                                oldValues.Add(item);
                        Value = String.Join(Delimeter, oldValues);
                        break;
                    case "Remove":
                        oldValues = String.Concat(Value).Split(new String[] { Delimeter }, StringSplitOptions.RemoveEmptyEntries).ToList();
                        if (int.TryParse(values[1], out id))
                        {
                            var item = Items.List[id];
                            if (oldValues.IndexOf(item.Value) > -1)
                                oldValues.Remove(item.Value);
                            if (item.IsMissed)
                                Items.List.Remove(item);
                        }
                        Value = String.Join(Delimeter, oldValues);
                        break;
                }
            }
            if (EditValueChanged != null)
                EditValueChanged(this, EventArgs.Empty);
            InnerRender();

            if (OnClickScript != "")
            {
                ASPxLabel label = new ASPxLabel();
                label.ClientSideEvents.Init = string.Format(@"function(s,e) {{ {0} }}", OnClickScript);
                Controls.Add(label);
            }
            if (OnCallback != null)
                OnCallback(source, e);
        }