private Column InternalInfer(string columnName, Type columnDataType)
		{
			var column = new Column(columnName);

			if (IsSimpleType(columnDataType))
			{
				if (IsShortNumeric(columnDataType))
				{
					column.Width = 5;
					column.Style.Alignment = TextAlignment.Center;
				}
				else if (IsLongNumeric(columnDataType))
				{
					column.Width = 10;
					column.Style.Alignment = TextAlignment.Right;
				}
				else if (IsCurrency(columnDataType))
				{
					column.Width = 10;
					column.FormatString = "R$ {0:0.00}";
					column.Style.Alignment = TextAlignment.Right;
				}
				else if (IsDate(columnDataType))
				{
					column.Width = 10;
					column.FormatString = "{0:dd/MM/yyyy}";
					column.Style.Alignment = TextAlignment.Center;
				}
				else if (IsBoolean(columnDataType))
				{
					column.Width = 5;
					column.MapValue("", "--");
					column.MapValue("True", "Sim");
					column.MapValue("False", "Não");
					column.Style.Alignment = TextAlignment.Center;
				}
			}

			if (mdHelper != null)
				mdHelper.ComplementStyle(column);

			return column;
		}
		/// <summary>
		/// Complementa o estilo de uma coluna, baseado nos metadados.
		/// </summary>
		/// <param name="column">A coluna</param>
		public void ComplementStyle(Column column)
		{
			var xpath = String.Format("/ReportMetadata/Fields/Field[@Name='{0}']", column.Expression);
			var el = doc.SelectSingleNode(xpath) as XmlElement;
			if (el != null)
			{
				var caption = el.GetAttributeNode("Caption");
				var width = el.GetAttributeNode("Width");
				var format = el.GetAttributeNode("FormatString");
				var nullValue = el.GetAttributeNode("NullValue");
				var textAlign = el.GetAttributeNode("TextAlignment");
				var headerAlign = el.GetAttributeNode("HeaderAlignment");

				if (caption != null)
					column.Header.Contents = caption.Value;

				if (width != null)
					column.Width = Convert.ToDouble(width.Value, CultureInfo.InvariantCulture);

				if (format != null)
					column.FormatString = format.Value;

				if (nullValue != null)
					column.NullValue = nullValue.Value;

				if (textAlign != null)
					column.Style.Alignment = (TextAlignment) Enum.Parse(typeof(TextAlignment), textAlign.Value, true);

				if (headerAlign != null)
					column.Header.Style.Alignment = (TextAlignment) Enum.Parse(typeof(TextAlignment), headerAlign.Value, true);

				foreach (XmlElement map in el.SelectNodes("Map"))
					column.MapValue(map.GetAttribute("Value"), map.GetAttribute("To"));
			}
			else
				throw new ArgumentException(String.Format("Report Metadata for column named {0} not found.", column.Expression));
		}
		public virtual object Get(Column col)
		{
			return col.FormatValue(DataBinder.Eval(row, col.Expression));
		}
		public int Add(Column column)
		{
			return List.Add(column);
		}