Не могу справиться с DdeCustomTable
Atom
16.11.2010
Foxbow


Масса благодарностей за библиотеку!

Создал класс

[DdeCustomTable("Деривативы")]
	//[Ignore(FieldName = "IsDisposed")]
	public class DerivativesDDETable
	{
		[DdeCustomColumn("Бумага сокр.", Order = 0)]
		//[Identity]
		public string SecurityName { get; set; }

		[DdeCustomColumn("Код бумаги", Order = 1)]
		public string SecurityCode { get; set; }

		[DdeCustomColumn("До погашения", Order = 2)]
		public int TillExpiration { get; set; }

		[DdeCustomColumn("Шаг цены", Order = 3)]
		public double PriceStep { get; set; }

		[DdeCustomColumn("Ст. шага цены", Order = 4)]
		public double PriceStepPice { get; set; }

		[DdeCustomColumn("Страйк", Order = 5)]
		public double Strike { get; set; }

		[DdeCustomColumn("Баз. актив", Order = 6)]
		public string Asset { get; set; }

		[DdeCustomColumn("ГО покупателя", Order = 7)]
		public double BuyerMargin { get; set; }

		[DdeCustomColumn("ГО продавца", Order = 8)]
		public double SellerMargin { get; set; }

		[DdeCustomColumn("Дата исп.", Order = 9)]
		public DateTime FinalExpiration { get; set; }

		[DdeCustomColumn("Погашение", Order = 10)]
		public DateTime Expiration { get; set; }

		[DdeCustomColumn("Пред. оц", Order = 11)]
		public DateTime RC { get; set; }
	}

После

protected override void OnConnect()
		{
			ProcessCustomTables += (type, objects) =>
			{
				// нас интересует только CustomPortfolio
				if (type == typeof(DerivativesDDETable))
				{
					
				}
			};
			Terminal.StartDde("Деривативы");
			Terminal.StartDde(ListenedTables);

			base.OnConnect();
		}

на ProcessDataError приходит ArgumentOutOfRangeException

Деривативы Имя параметра: category

Что это значит? Пытался работать только с одной колонкой - то же самое. По форуму ничего не нашел =(


Теги:


Спасибо:


< 1 2 3 4  >
a.dobryn

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


MCTuTeJ|19951995: Попробуйте там же где Вы на все остальные подписываетесь. спасибо, так и сделала =)

в итоге получилось это:

Message "Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index"

текст целиком (не вытащить во время дебага, у error'а столько всего внутри)

все равно не понимаю - мы подписываемся на событие ProcessDataError в функции коннекта к quik'у, а ошибка вылезает при начале DDE, как оно так?

Спасибо:

a.dobryn

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


Хм, переделала это дело под другую таблицу, и оно внезапно заработало, без нареканий.

Спасибо:

a.dobryn

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


Только данные не обновляются после обновления таблицы в quick - где нужно проверить?

Спасибо:

Mikhail Sukhov

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


D_Alex: Хм, переделала это дело под другую таблицу, и оно внезапно заработало, без нареканий.

Я посмотрел причину такой ошибки. Она может быть только в том случае, если у колонки индекс больше допустимого. Например, пришло меньше полей по ДДЕ.

Спасибо: a.dobryn

Mikhail Sukhov

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


D_Alex: Только данные не обновляются после обновления таблицы в quick - где нужно проверить?

Посмотрите соседний топик. Я думаю такая же ситуация.

Спасибо:

a.dobryn

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


Mikhail Sukhov: Я посмотрел причину такой ошибки. Она может быть только в том случае, если у колонки индекс больше допустимого. Например, пришло меньше полей по ДДЕ. скорее всего, наверное, неправильно описала саму структуру портфеля.

Mikhail Sukhov:

D_Alex: Только данные не обновляются после обновления таблицы в quick - где нужно проверить? Посмотрите соседний топик. Я думаю такая же ситуация.

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

upd:

Оказалось, не описан NotifyPropertyChanged (да уж, а еще жду от программы чего-то)

Делаю, как в примере

   private PropertyChangedEventHandler _propertyChanged;

        event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
        {
            add { _propertyChanged += value; }
            remove { _propertyChanged -= value; }
        }
        private void NotifyPropertyChanged(string info)
        {
            if (_propertyChanged != null)
                _propertyChanged(this, new PropertyChangedEventArgs(info));
        }

Вылезает такая штука:

'TFromQuik.CustomPortfolio.INotifyPropertyChanged.PropertyChanged': containing type does not implement interface 'System.ComponentModel.INotifyPropertyChanged'
Спасибо:

MCTuTeJ|19951995

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


Сталкивался с такой штукой - класс нужно отнаследовать от INotifyPropertyChanged

Спасибо:

a.dobryn

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


Сделала =) Закомпилилось, работает. Вроде обновляется (у меня сейчас одна колонка с данными, ползунок ползет), но данные те же самые! Ничего не понимаю.

код в итоге такой

public class CustomPortfolio : INotifyPropertyChanged
{
        [DdeCustomColumn("Цена", Order = 0)]
        public double Price { get; set; }

        private PropertyChangedEventHandler _propertyChanged;

        event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
        {
            add { _propertyChanged += value; }
            remove { _propertyChanged -= value; }
        }
        private void NotifyPropertyChanged(string info)
        {
            if (_propertyChanged != null)
                _propertyChanged(this, new PropertyChangedEventArgs(info));
        }
}

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

Спасибо:

MCTuTeJ|19951995

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


Какой ползунок ? А где проверяете обновление данных ? Если в ProcessCustomTables то оно не приходит при изменении существующих данных.

Спасибо:

MCTuTeJ|19951995

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


Михаил, а Вы не подскажете нормальный источник где можно про технологию DDE почитать ?

Спасибо:
< 1 2 3 4  >

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

loading
clippy