private DbColumnManager WaitForItem(int index, string property)
        {
            if (!isStarted)
            {
                Start();
            }

            countSet.WaitOne();
            DbColumnManager man = null;

            if (!string.IsNullOrEmpty(property))
            {
                man = GetColumnManager(property);
                if (man == null)
                {
                    throw new ArgumentException("No manager found for property " + property);
                }
            }

            if (index >= count)
            {
                throw new ArgumentOutOfRangeException("index");
            }

            itemWaitingList.WaitForItem(index);

            CheckLastError();

            if (index >= count)
            {
                throw new ArgumentOutOfRangeException("index");
            }

            return(man);
        }
        public object this [int index, string property]
        {
            get
            {
                DbColumnManager man = WaitForItem(index, property);
                if (man == null)
                {
                    throw new ArgumentException("No manager found for property " + property);
                }

                return(man.GetValue(innerList [index]));
            }
            set
            {
                DbColumnManager man = WaitForItem(index, property);
                if (man == null)
                {
                    throw new ArgumentException("No manager found for property " + property);
                }

                man.SetValue(innerList [index], value);
            }
        }
        protected override void InitializeColumnManagers()
        {
            FieldTranslationCollection fTrans = provider.FieldsTable;
            SelectBuilder sBuilder            = new SelectBuilder(fTrans, commandText);

            colManagers = new DbColumnManager [sBuilder.SelectClause.Count];
            foreach (SelectColumnInfo columnInfo in sBuilder.SelectClause)
            {
                columns.Add(fTrans.StripQuotationChars(columnInfo.ColumnName));
            }

            DbField [] fields = fTrans.TranslateToDbField(columns.ToArray());
            for (int i = 0; i < columns.Count; i++)
            {
                LazyTableColumnManager lcm = new LazyTableColumnManager(i, fields [i]);
                string columnName          = columns [i];

                colManagers [i]              = lcm;
                dbPropManagers [columnName]  = lcm;
                allPropManagers [columnName] = lcm;
            }

            translateManagers = false;
        }
 public LazyTableColumnDescriptor(DbColumnManager manager)
     : base(manager.DbField.Field, null)
 {
     this.manager = manager;
 }