コード例 #1
0
ファイル: DynamicDataBuilder.cs プロジェクト: ll3v3ll/SWE7903
        public static MyDataService.DataSetData GetUpdatedDataSet(IEnumerable list, ObservableCollection <MyDataService.DataTableInfo> tables)
        {
            MyDataService.DataSetData data = new MyDataService.DataSetData();
            data.Tables = tables;
            //data.Tables = new ObservableCollection<DataSetInDataGrid.Silverlight.MyDataService.DataTableInfo>();
            //foreach (MyDataService.DataTableInfo t in tables)
            //{
            //    MyDataService.DataTableInfo table = new MyDataService.DataTableInfo { TableName = t.TableName };
            //    table.Columns = new ObservableCollection<DataSetInDataGrid.Silverlight.MyDataService.DataColumnInfo>();
            //    foreach (MyDataService.DataColumnInfo c in t.Columns)
            //    {
            //        table.Columns.Add(new MyDataService.DataColumnInfo{ColumnName= c.ColumnName, DataTypeName
            //    }
            //}

            XElement root = new XElement("DataSet");

            foreach (DataObject d in list)
            {
                if (d.State != DataObject.DataStates.Unchanged)
                {
                    XElement       row = new XElement("Data", new XAttribute("RowState", d.State.ToString()));
                    PropertyInfo[] pis = d.GetType().GetProperties();
                    foreach (PropertyInfo pi in pis)
                    {
                        object val = pi.GetValue(d, null);
                        if (val != null)
                        {
                            row.Add(new XElement(pi.Name, val.ToString()));
                        }
                        else
                        {
                            row.Add(new XElement(pi.Name, ""));
                        }
                    }
                    root.Add(row);
                }
            }
            XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), root);

            data.DataXML = xdoc.ToString();

            return(data);
        }
コード例 #2
0
ファイル: DynamicDataBuilder.cs プロジェクト: ll3v3ll/SWE7903
        public static IEnumerable GetDataList(MyDataService.DataSetData data)
        {
            if (data.Tables.Count() == 0)
            {
                return(null);
            }

            MyDataService.DataTableInfo tableInfo = data.Tables[0];

            System.Type dataType = BuildDataObjectType(tableInfo.Columns, "MyDataObject");

            //ObservableCollection<DataObject> l = new ObservableCollection<DataObject>();

            var listType = typeof(ObservableCollection <>).MakeGenericType(new[] { dataType });
            var list     = Activator.CreateInstance(listType);

            XDocument xd    = XDocument.Parse(data.DataXML);
            var       table = from row in xd.Descendants(tableInfo.TableName)
                              select row.Elements().ToDictionary(r => r.Name, r => r.Value);

            foreach (var r in table)
            {
                var rowData = Activator.CreateInstance(dataType) as DataObject;
                if (rowData != null)
                {
                    foreach (MyDataService.DataColumnInfo col in tableInfo.Columns)
                    {
                        if (r.ContainsKey(col.ColumnName) && col.DataTypeName != typeof(System.Byte[]).FullName && col.DataTypeName != typeof(System.Guid).FullName)
                        {
                            rowData.SetFieldValue(col.ColumnName, r[col.ColumnName], true);
                        }
                    }
                }
                listType.GetMethod("Add").Invoke(list, new[] { rowData });
            }
            ObservableCollection <DataObject> l = list as ObservableCollection <DataObject>;

            return(list as IEnumerable);
        }