Re[4]: IMapGettable хочется
От: oleksab Украина  
Дата: 09.11.05 09:05
Оценка:
Я в предидущем посте налажал и тело взял не от того MapInternal:
        internal static void MapInternal(
            IMapDataSource source,
            object sourceData,
            IMapDataReceiver receiver,
            object receiverData)
        {
            if (receiverData is ISupportInitialize)
                ((ISupportInitialize)receiverData).BeginInit();

            IMapGettable mg = sourceData as IMapGettable;

            if (receiverData is IMapSettable)
            {
                IMapSettable mapReceiver = (IMapSettable)receiverData;

                for (int i = 0; i < source.FieldCount; i++)
                {
                    string name = source.GetFieldName(i);
                    object o = source.GetFieldValue(i, sourceData);
                    if (mg != null)
                    {
                        mg.GetField(name, ref o);
                    }

                    if (mapReceiver.SetField(name, o) == false)
                    {
                        int idx = receiver.GetOrdinal(name);

                        if (idx >= 0)
                        {
                            receiver.SetFieldValue(idx, name, receiverData, o);
                        }
                    }
                }
            }
            else
            {
                for (int i = 0; i < source.FieldCount; i++)
                {
                    string name = source.GetFieldName(i);

                    // -----------------------------------
                    if (name.Length > 0)
                    {
                        int idx = receiver.GetOrdinal(name);

                        if (idx >= 0)
                        {
                            object o = source.GetFieldValue(i, sourceData);
                            if (mg != null)
                            {
                                mg.GetField(name, ref o);
                            }

                            receiver.SetFieldValue(idx, name, receiverData, o);
                        }
                    }
                }
            }

            if (receiverData is ISupportInitialize)
                ((ISupportInitialize)receiverData).EndInit();
        }
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.