using System; using System.Data; using System.Collections.Generic; using System.Reflection; namespace SiaSun.LMS.Common { /// /// 基础类 /// public class DataSetOperate { /// /// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列 /// public DataSetOperate() { } /// /// 复制数据集合结构 /// public DataTable CopyDataTableColumns(DataTable tableSource) { DataTable tableCopy = new DataTable(); foreach (DataColumn col in tableSource.Columns) { DataColumn colCopy = new DataColumn(); colCopy.ColumnName = col.ColumnName; colCopy.DataType = col.DataType; colCopy.DefaultValue = col.DefaultValue; colCopy.AllowDBNull = col.AllowDBNull; colCopy.Unique = col.Unique; tableCopy.Columns.Add(colCopy); } return tableCopy; } #region ----设置DataTable的约束 /// /// 设置列主键 /// /// 列名 /// 数据源表 public void SetKeys(System.Data.DataTable table, params string[] columnName) { List listColumn = new List(); //查找匹配的列,添加到主键集合内 foreach (string s in columnName) { if (table.Columns.Contains(s)) { listColumn.Add(table.Columns[s]); if (listColumn.Count == columnName.Length) break; } } //设置主键集合 table.PrimaryKey = listColumn.ToArray(); } /// /// 设置列是否是唯一 /// /// 列名 /// 数据源表 /// 是否唯一 public void SetUnique(string columnName, System.Data.DataTable table, bool isUnique) { foreach (DataColumn col in table.Columns) { if (col.ColumnName == columnName) { col.Unique = isUnique; break; } } } /// /// 设置列是否允许空 /// /// 列名 /// 数据源表 /// 是否唯一 public void SetNull(string columnName, System.Data.DataTable table, bool isNull) { foreach (DataColumn col in table.Columns) { if (col.ColumnName == columnName) { col.AllowDBNull = isNull; break; } } } #endregion #region ------表间关系操作 /// /// 建立DataTable表间的关系 /// /// 需要建立关系的DataSet /// 主键表名称 /// 外键表名称 /// 主键列名称 /// 外键列名称 public void newRelation(DataSet ds, string primaryTableName, string foreignTableName, string primaryColumnName, string foreignColumnName) { DataTable primaryTable = ds.Tables[primaryTableName]; DataTable foreignTable = ds.Tables[foreignTableName]; ds.Relations.Add(primaryTableName + foreignTableName, primaryTable.Columns[primaryColumnName], foreignTable.Columns[foreignColumnName]); } /// /// 先建立DataSet间关系,在向外建表DataTabe中增加列 /// /// 需要建立关系的DataSet /// /// 主键表名称 /// 外键表名称 /// 主键列名称 /// 外键列名称 /// 主键表中列名称 /// 外键表中新增列名称 public void addColumnWithRelation(DataSet ds, string primaryTableName, string foreignTableName, string primaryColumnName, string foreignColumnName, string addColumnName, string newColumnName) { DataTable primaryTable = ds.Tables[primaryTableName]; DataTable foreignTable = ds.Tables[foreignTableName]; ds.Relations.Add(primaryTableName + foreignTableName, primaryTable.Columns[primaryColumnName], foreignTable.Columns[foreignColumnName]); DataColumn newColumn = new DataColumn(newColumnName, ds.Tables[primaryTableName].Columns[addColumnName].DataType); ds.Tables[foreignTableName].Columns.Add(newColumn); int rowCount = ds.Tables[foreignTableName].Rows.Count; for (int i = 0; i < rowCount; i++) { DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName); foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName]; } } /// /// 需要建立关系的DataSet /// 主键表名称 /// 外键表名称 /// 主键表中列名称 /// 外键表中新增列名称 public void addColumn(DataSet ds, string primaryTableName, string foreignTableName, string addColumnName, string newColumnName) { DataTable primaryTable = ds.Tables[primaryTableName]; DataTable foreignTable = ds.Tables[foreignTableName]; DataColumn newColumn = new DataColumn(newColumnName, ds.Tables[primaryTableName].Columns[addColumnName].DataType); ds.Tables[foreignTableName].Columns.Add(newColumn); int rowCount = ds.Tables[foreignTableName].Rows.Count; for (int i = 0; i < rowCount; i++) { DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName); foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName]; } } #endregion } }