← Zurück

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

событие 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]);
                  }
               }
          }
      }
   }
};

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (1)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Ranlod
Ranlod Autor

Разобрался. Это я недосмотрел и тупо скопировал класс QuikCandle из примера, а там по умолчанию

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