예제 #1
0
        private void RebuildIndex()
        {
            var pkColumn = GetColumn(_icolPk);

            if (pkColumn == null)
            {
                _pkIndex = null;
                return;
            }

            var dictionary = new Dictionary <object, int>(pkColumn.RowCount);

            for (int i = 0; i < pkColumn.RowCount; i++)
            {
                var value = pkColumn.GetValue(i);
                if (null == value)
                {
                    throw CommonException.Create(ListExceptionDetail.NullValue(ListName, ListDef.IdProperty));
                }
                try
                {
                    dictionary.Add(pkColumn.GetValue(i), i);
                }
                catch (Exception e)
                {
                    throw CommonException.Create(ListExceptionDetail.DuplicateValue(ListName, ListDef.IdProperty, value), e);
                }
            }
            _pkIndex = dictionary;
        }
예제 #2
0
        private int EnsureFindColumnIndex(string columnName)
        {
            if (string.IsNullOrEmpty(columnName))
            {
                return(-1);
            }
            int icol = FindColumnIndex(columnName);

            if (icol < 0)
            {
                throw CommonException.Create(ListExceptionDetail.ColumnNotFound(ListName, columnName));
            }
            return(icol);
        }
예제 #3
0
        public ListData ChangeListDef(ListDef newListDef, IDictionary <string, string> originalColumnNames)
        {
            if (RowCount == 0 || originalColumnNames != null && originalColumnNames.Count == 0)
            {
                return(new ListData(newListDef));
            }
            var newColumns = new List <ColumnData>();

            foreach (var annotationDef in newListDef.Properties)
            {
                string originalName;
                if (originalColumnNames == null)
                {
                    originalName = annotationDef.Name;
                }
                else
                {
                    if (!originalColumnNames.TryGetValue(annotationDef.Name, out originalName))
                    {
                        newColumns.Add(ColumnData.MakeColumnData(annotationDef).SetRowCount(RowCount));
                        continue;
                    }
                }
                int icolOrig          = FindColumnIndex(originalName);
                var origColumn        = Columns[icolOrig];
                var origAnnotationDef = ListDef.Properties[icolOrig];
                if (annotationDef.ValueType == origAnnotationDef.ValueType)
                {
                    newColumns.Add(origColumn);
                    continue;
                }
                var newColumn = ColumnData.MakeColumnData(annotationDef).SetRowCount(RowCount);
                for (int i = 0; i < RowCount; i++)
                {
                    var    origValue = origColumn.GetValue(i);
                    object newValue;
                    if (!TryChangeType(origValue, annotationDef.ValueType, out newValue))
                    {
                        throw CommonException.Create(
                                  ListExceptionDetail.InvalidValue(newListDef.Name, origAnnotationDef.Name, origValue));
                    }
                    if (newValue != null)
                    {
                        newColumn.SetValue(i, newValue);
                    }
                }
                newColumns.Add(newColumn);
            }
            return(new ListData(newListDef, newColumns));
        }