событие NewCustomTables не возвращает изменившиеся строки
Atom Ответить
01.08.2012


событие NewCustomTables возвращает только новые строки. Хотя в документации написано
Цитата:
В случае, если ни одно из полей не было помечено атрибутом IdentityAttribute, то событие QuikTrader.CustomTablesChanged не будет никогда вызываться, и все изменения будут приходит как новые строчки через QuikTrader.NewCustomTables.

Посмотрел в отладчике, возвращается только одна строка с новым временем. Я и не знаю что я делаю не так.
Код
trader.NewCustomTables += (type, objects) =>
{
// нас интересует только QuikCandle
   if (type == typeof(QuikCandle))
   {
       List<QuikCandle> QC = (List<QuikCandle>)objects.Cast<QuikCandle>();

       for (int i = 0; i < QC.Count; i++)
       {
           string datatime = QC[i].DateTime.Date + QC[i].DateTime.Time;
           DataRow newrow = dt.NewRow();
           object searh = datatime;
           newrow.ItemArray = new object[] {QC[i].DateTime.Date, QC[i].DateTime.Time, datatime, QC[i].OpenPrice, QC[i].HighPrice, QC[i].LowPrice, QC[i].ClosePrice, QC[i].Volume };
           if ((Convert.ToInt32(QC[i].DateTime.Time) >= nach) & (Convert.ToInt32(QC[i].DateTime.Time) <= konec))
           {

               if (!dt.Rows.Contains(searh)) //Если значение не существует в бд то добавляем
               {
                  dt.Rows.Add(newrow);
                  Console.WriteLine(dt.Rows[dt.Rows.Count - 1][2] + " " + dt.Rows[dt.Rows.Count - 1][3]);
               }
               else //Если значение есть то проверяем изменилось ли оно(Вот эта часть инструкции не работает из-за того что всегда возвращается только новое значение)
               {
                  bool log = true;
                  Console.WriteLine(dt.Rows.Find(datatime).ItemArray[2]);
                  for (int z = 3; z < newrow.ItemArray.Length; z++)
                  {
                      if (Convert.ToDecimal(dt.Rows.Find(datatime).ItemArray[z]) != Convert.ToDecimal(newrow.ItemArray[z]))
                      {
                           log = false;
                           break;
                      }
                  }
                  if (log)
                  {
                     dt.Rows.Find(datatime).ItemArray = new object[] { QC[i].DateTime.Date, QC[i].DateTime.Time, datatime, QC[i].OpenPrice, QC[i].HighPrice, QC[i].LowPrice, QC[i].ClosePrice, QC[i].Volume };
                     Console.WriteLine(dt.Rows.Find(datatime).ItemArray[2] + " " + dt.Rows.Find(datatime).ItemArray[3]);
                  }
               }
          }
      }
   }
};

По идее, если я правильно понял из документации, событие должно возвращать изменяющиеся строки как новые и вторая чать инструкции должна работать.

Теги:


Спасибо:




1 Ответов
Ranlod

Фотография
Дата: 02.08.2012
Ответить


Разобрался. Это я недосмотрел и тупо скопировал класс QuikCandle из примера, а там по умолчанию
Код
[Identity]// Из-за того что не убрал атрибут из примера и не приходили изменённые строчки как новые
[InnerSchema]
public QuikCandleDateTime DateTime { get; set; }

Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy