表格列合并

  /// <summary>
        /// 将Table的类型合并
        /// </summary>
        /// <param name="dataSet">Table的集合</param>
        /// <param name="keys">需要合并的Key</param>
        /// <returns></returns>
        public static DataTable MergeDataTable(DataSet dataSet, List<string> keys)
        {
            DataTable tableMerge = new DataTable();

            // 创建Table Column
            for (int i = 0; i < dataSet.Tables.Count; i++)
            {
                // 第一个表格,完全复制其内容
                if (i == 0)
                {
                    tableMerge = dataSet.Tables[0].Copy();
                }
                else
                {
                    foreach (DataColumn dataColumn in dataSet.Tables[i].Columns)
                    {
                        // 重新添加一个Column
                        if (tableMerge.Columns[dataColumn.ColumnName] == null)
                        {
                            tableMerge.Columns.Add(dataColumn.ColumnName, dataColumn.DataType);
                        }
                    }
                }
            }

            // 填充数据
            DataTable dataTable = null;
            bool flgEqual = true;
            bool flgExists = false;
            for (int i = 1; i < dataSet.Tables.Count; i++)
            {
                // 获取其中的Table
                dataTable = dataSet.Tables[i];

                // 循环Merge
                foreach (DataRow dataRow in dataTable.Rows)
                {
                    flgExists = false;
                    // 循环数据
                    foreach (DataRow dataRowMerge in tableMerge.Rows)
                    {
                        // 判断Key的值是否相等
                        flgEqual = true;
                        foreach (string key in keys)
                        {
                            if (dataRowMerge[key].ToString().Equals(dataRow[key].ToString()) == false)
                            {
                                flgEqual = false;
                                break;
                            }
                        }
                        // 如果值匹配了
                        if (flgEqual == true)
                        {
                            flgExists = true;
                            // 循环表单
                            foreach (DataColumn dataColumn in dataTable.Columns)
                            {
                                if (keys.Contains(dataColumn.ColumnName) == false
                                    && tableMerge.Columns.Contains(dataColumn.ColumnName) == true)
                                {
                                    // 填充数据内容
                                    dataRowMerge[dataColumn.ColumnName] = dataRow[dataColumn.ColumnName];
                                }

                            }
                        }
                    }
                    // 如果不存在改数据的内容,需要添加一个数据
                    if (flgExists == false)
                    {
                        DataRow newRow = tableMerge.NewRow();
                        // 循环表单
                        foreach (DataColumn dataColumn in dataTable.Columns)
                        {
                            // 填充数据内容
                            newRow[dataColumn.ColumnName] = dataRow[dataColumn.ColumnName];
                        }
                        // 添加数据
                        tableMerge.Rows.Add(newRow);
                    }
                }
            }

            // 结果集返回
            return tableMerge;
        }

        /// <summary>
        /// 将Table的类型合并
        /// </summary>
        /// <param name="dataSet">Table的集合</param>
        /// <returns></returns>
        public static DataTable MergeDataTable(DataSet dataSet)
        {
            DataTable tableMerge = new DataTable();
            DataTable dataTable = null;
            if (dataSet.Tables.Count > 0)
            {
                tableMerge = dataSet.Tables[0].Copy();
                int minRowCount;
                for (int i = 1; i < dataSet.Tables.Count; i++)
                {
                    dataTable = dataSet.Tables[i];
                    minRowCount = tableMerge.Rows.Count <= dataTable.Rows.Count
                        ? tableMerge.Rows.Count : dataTable.Rows.Count;

                    foreach (DataColumn dataColumn in dataTable.Columns)
                    {
                        // 重新添加一个Column
                        if (tableMerge.Columns[dataColumn.ColumnName] == null)
                        {
                            tableMerge.Columns.Add(dataColumn.ColumnName, dataColumn.DataType);
                        }
                    }

                    for (int j = 0; j < minRowCount; j++)
                    {
                        foreach (DataColumn dataColumn in dataTable.Columns)
                        {
                            tableMerge.Rows[j][dataColumn.ColumnName] = dataTable.Rows[j][dataColumn.ColumnName];
                        }
                    }

                    if (tableMerge.Rows.Count < dataTable.Rows.Count)
                    {
                        DataRow newRow = null;
                        for (int j = tableMerge.Rows.Count; j < dataTable.Rows.Count; j++)
                        {
                            newRow = tableMerge.NewRow();
                            foreach (DataColumn dataColumn in dataTable.Columns)
                            {
                                newRow[dataColumn.ColumnName] = dataTable.Rows[j][dataColumn.ColumnName];
                            }
                            tableMerge.Rows.Add(newRow);
                        }
                    }
                }
            }

            // 结果集返回
            return tableMerge;
        }

posted @ 2013-03-21 13:55  天空之城2012  阅读(352)  评论(0编辑  收藏  举报