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