Пример #1
0
        private static ListStore GetListStoreFromObject(object source, out BindManager bManager, string textMember, string valueMember)
        {
            int       i;
            ListStore store;

            if (string.IsNullOrEmpty(textMember) && !string.IsNullOrEmpty(valueMember))
            {
                throw new Exception("The text member can not be null when a value member is specified!");
            }

            bManager = new BindManager(source);
            if (string.IsNullOrEmpty(textMember) && string.IsNullOrEmpty(valueMember))
            {
                store = new ListStore(bManager.Rows.RowType);

                for (i = 0; i < bManager.Rows.Count; i++)
                {
                    store.AppendValues(bManager.Rows [i].Value);
                }
            }
            else
            {
                bool    emptyValuePath = string.IsNullOrEmpty(valueMember);
                Type [] colTypes       = bManager.Columns.GetColumnTypes();
                int     textColumn     = bManager.Columns [textMember].Index;
                if (emptyValuePath)
                {
                    store = new ListStore(typeof(object), colTypes [textColumn]);
                    for (i = 0; i < bManager.Rows.Count; i++)
                    {
                        BindRow <object> rowObjects = bManager.Rows [i];
                        store.AppendValues(rowObjects.Value, rowObjects [textColumn]);
                    }
                }
                else
                {
                    int valueColumn = bManager.Columns [valueMember].Index;
                    store = new ListStore(colTypes [valueColumn], colTypes [textColumn]);

                    for (i = 0; i < bManager.Rows.Count; i++)
                    {
                        object [] rowObjects = bManager.Rows [i].ToArray();
                        store.AppendValues(rowObjects [valueColumn], rowObjects [textColumn]);
                    }
                }
            }

            return(store);
        }
Пример #2
0
        private static Hashtable GetBoundFields(BindManager manager, int row)
        {
            Hashtable        ret     = new Hashtable();
            BindRow <object> rowList = manager.Rows [row];

            ret.Add(string.Empty, (rowList.Value ?? string.Empty).ToString());

            if (manager.Columns.NamedColumns)
            {
                for (int i = 0; i < manager.Columns.Count; i++)
                {
                    ret.Add(manager.Columns [i].ResolvedName, rowList [i]);
                }
            }
            else if (!(rowList.Value is string))
            {
                for (int i = 0; i < manager.Columns.Count; i++)
                {
                    ret.Add(i, rowList [i]);
                }
            }

            return(ret);
        }
Пример #3
0
        protected virtual void RefreshStructure(Hashtable boundFields)
        {
            bindableFields = boundFields;

            int i;

            if (boundFields.ContainsKey(sourceTableHasFooterSource))
            {
                bool.TryParse(boundFields [sourceTableHasFooterSource].ToString(), out sourceTableHasFooter);
            }

            if (!boundFields.ContainsKey(sourceTable))
            {
                return;
            }

            BindManager bManager = new BindManager(boundFields [sourceTable], true, ColumnNameResolver);

            // bManager.Columns may be null when the source table is a dictionary
            // the check below simply prevents crashing but the binding manager should be extended later
            if (columns.Count == 0 && bManager.Columns != null)
            {
                autoColumns = true;
                if (bManager.Columns.NamedColumns)
                {
                    for (i = 0; i < bManager.Columns.Count; i++)
                    {
                        columns.Add(new TableColumn(bManager.Columns [i].Name, bManager.Columns [i].Caption));
                    }
                }
                else
                {
                    for (i = 0; i < bManager.Columns.Count; i++)
                    {
                        columns.Add(new TableColumn(i.ToString(), i.ToString()));
                    }
                }

                TableColumn tableColumn;
                if (hasHeader)
                {
                    header = DocumentHelper.FormObjectCreator.CreateRow(columns.Count);
                    header.BindableFields = boundFields;

                    for (i = 0; i < columns.Count; i++)
                    {
                        tableColumn = columns [i];

                        TableCell headerCell = (TableCell)header.Children [i];
                        headerCell.Template.AddRange(tableColumn.HeaderTemplate);
                        headerCell.Style = (ObjectStyle)tableColumn.HeaderStyle.Clone();
                    }
                }

                if (sourceTableHasFooter)
                {
                    footer = DocumentHelper.FormObjectCreator.CreateRow(columns.Count);
                    footer.BindableFields = boundFields;

                    BindRow <object> footerRow = null;
                    if (!string.IsNullOrEmpty(sourceTableHasFooterSource) && bManager.Rows.Count > 0)
                    {
                        footerRow = bManager.Rows [bManager.Rows.Count - 1];
                    }
                    for (i = 0; i < columns.Count; i++)
                    {
                        tableColumn = columns [i];

                        TextBox tb = DocumentHelper.FormObjectCreator.CreateTextBox();
                        tb.Text = footerRow == null ? string.Empty : footerRow [i].ToString();
                        TableCell footerCell = (TableCell)footer.Children [i];
                        footerCell.Template.Add(tb);
                        footerCell.Style = (ObjectStyle)tableColumn.FooterStyle.Clone();
                    }
                }
                else
                {
                    footer = null;
                }
            }

            RefreshRowStyles();

            rows.Clear();
            if (header != null)
            {
                rows.Add(header);
            }

            for (i = 0; i < bManager.Rows.Count - (sourceTableHasFooter && !string.IsNullOrEmpty(sourceTableHasFooterSource) ? 1 : 0); i++)
            {
                TableRow tableRow = DocumentHelper.FormObjectCreator.CreateRow(Columns, GetBoundFields(bManager, i));
                tableRow.Style = (ObjectStyle)itemStyle.Clone();
                rows.Add(tableRow);
                if (style.InnerVerticalBorder.HasValue)
                {
                    tableRow.Style.InnerVerticalBorder = style.InnerVerticalBorder;
                }
            }

            bindableFields = boundFields;

            if (sourceTableHasFooter && footer != null)
            {
                rows.Add(footer);
            }
        }