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);
}