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

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


событие NewCustomTables возвращает только новые строки. Хотя в документации написано [quote]В случае, если ни одно из полей не было помечено атрибутом IdentityAttribute, то событие QuikTrader.CustomTablesChanged не будет никогда вызываться, и все изменения будут приходит как новые строчки через QuikTrader.NewCustomTables.[/quote] Посмотрел в отладчике, возвращается только одна строка с новым временем. Я и не знаю что я делаю не так. [code=csharp]trader.NewCustomTables += (type, objects) => { // нас интересует только QuikCandle if (type == typeof(QuikCandle)) { List QC = (List)objects.Cast();

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

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


Теги:


Спасибо:


Ranlod

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


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

Спасибо:


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

loading
clippy