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); }
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); }
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); } }