LSTANCZYK
10/17/2014 - 3:01 PM

XPDataViewExtensions.cs

using DevExpress.Xpo;

namespace DevExpress.Xpo
{
  public static class XPDataViewExtensions
  {
    //
    // [usage]
    //   var view       = new XPDataView();
    //   var selectData = uow.ExecuteQueryWithMetaData(sql);
    //   
    //   view.FillProperties(selectData.ResultSet[0])
    //       .LoadData(new SelectedData(selectData.ResultSet[1]);
    //
    public static XPDataView FillProperties(this XPDataView self, SelectStatementResult schemaResult)
    {
      foreach (var row in schemaResult.Rows)
      {
        var propName = row.Values[0] as string;
        var propType = DBColumn.GetType((DBColumnType)Enum.Parse(typeof(DBColumnType), row.Values[2] as string));

        self.AddProperty(propName, propType);
      }

      return self;
    }

    //
    // [usage]
    //   new XPDataView().FillAndLoad(uow.ExecuteQueryWithMetaData(sql, names, values).ResultSet);
    //
    public static XPDataView FillAndLoad(this XPDataView self, SelectStatementResult[] results)
    {
      self.FillProperties(results[0])
          .LoadData(new SelectedData(results[1]));

      return self;
    }
    
    //
    // [usage]
    //   new XPDataView().FillAndLoad(sess, sql);
    //
    public static XPDataView FillAndLoad(this XPDataView self, Session sess, string sql)
    {
      return self.FillAndLoad(sess.ExecuteQueryWithMetadata(sql).ResultSet);
    }
  }
}