//По нажатию на меню
 public Item AddItem(ListCellButtonClickEventArgs e)
 {
     var c = new Item();
     //Cells из меню, у них другой порядок !!!!!
     c.ItemLine.Add("1"); //Count
     c.ItemLine.Add(e.Item.Cells[0].Value.ToString()); //Name
     c.ItemLine.Add(e.Item.Cells[1].Value.ToString()); //Id
     c.ItemLine.Add(MenuXml.GetMarker(e.Item.Cells[1].Value.ToString()));//Marker
     //Блюдо может быть нажато повторно
     //тогда оно не полезет в Dictionary
     //будет исключение
     var value = new Specification { Count = 1, NameDish = e.Item.Cells[0].Value.ToString(), Marker = e.Item.TemplateName };
         try
         {
             _order.Dish.Add(e.Item.Cells[1].Value.ToString(), value);
         }
         catch (Exception)
         {
             return null;
         }
     return c;
 }
 private void ChangeCount(ListCellGestureEventArgs e, int count)
 {
     e.Item.Cells[0].Value = count.ToString();
     var id = e.Item.Cells[2].Value.ToString();
     var value = new Specification { Count = count, NameDish = e.Item.Cells[1].Value.ToString() };
     //XML нет в Dish
     if (e.Item.Cells[2].Value.ToString().Length < 4) return;
     _order.Dish.Remove(id);
     _order.Dish.Add(id, value);
 }
 //При нажатии в меню добавляем блюдо в чек
 private void AddLineToOrderScreen(string dish, string id, 
             string count, bool print, bool addDish, bool children)
 {
     try
     {
     var marker = GetMarker(print,children);
     //Выходим, если стол красный "CALCULATE"
     if (DG.Calc && addDish)
     {
         MessageBox.Show(this.Device, "Этот стол рассчитан!", MessageBoxButtons.OKAY, null, null);
         return;
     }
     //Блюдо может быть нажато повторно
     //тогда оно не полезет в Dictionary
     //будет исключение. RecordSet нет с новым ключом, будем заносить программно
     var flagGiud = false;
     var guidKey = id;
     if (addDish) //Старые не заносим в Dish
     {   //записываем id, будем использовать в GetPrice(id)
         var value = new Specification {Count = 1, NameDish = dish, Marker = marker, IdDish = id};
         try
         {
             _order.Dish.Add(id, value);
         }
         catch (Exception)
         { //Надо засунуть в словарь повторно, если есть Модификатор
             if(!children) return;
             //Добавляем в List строя ключь Random
             guidKey = Guid.NewGuid().ToString();
             _order.Dish.Add(guidKey, value); //todo Теряем Id
             flagGiud = true;
         }
     }
     //Программно
     var item = new ListItem(_lstOrders.Group.Definition);
     //Заполняем программно, так как есть дубли, а RecordSet c дублями не работает
     if (flagGiud || id.Length < 4) //id из xml
     {
         item.Cells[0].Value = count;
         item.Cells[1].Value = dish;
         //Если блюдо из старого чека, нас интересует не id, а НомерСтроки из Orders.xml
         //это будем отслеживать при нажатии и править DataGarcon.OrderTable
         //Cells[2] - используем для идентификации в заказе - это строка
         item.Cells[2].Value = id;
         item.Tag = guidKey; //Засовываем в Tag старый Ид или новое значение
         item.TemplateName = marker;
         _lstOrders.Group.Add(item);
     }
     //Через RecordSet только черные
     else
     {
         _lstOrders.Group.Append(this.RecordSets[marker + id]);
     }
     }
     catch (Exception)
     {
         FormMain.ConsolePrint("ERROR - нет в меню" + dish + " Lie = " + id);
     }
 }