c#将一个数据表拆分为多个数据集

时间:2017-05-13 12:52:41

标签: c# datatable split dataset

我有正确的源DataTable“sourceDataTable”,我调用方法将其拆分为多个并将结果存储到DataSet“ds”中:

 DataSet ds = MyClass.SplitDataTables(sourceDataTable);

这是方法MyClass.SplitDataTables():

public static DataSet SplitDataTables(DataTable sourceDataTable)
    {
        using (DataSet dsOut = new DataSet())
        {
            DataTable dt1 = new DataTable;
            DataTable dt2 = new DataTable;
            DataTable dt3 = new DataTable;

            dt1 = sourceDataTable.Clone();
            dt2 = sourceDataTable.Clone();
            dt3 = sourceDataTable.Clone();

            foreach (DataRow row in sourceDataTable.Rows)
            {
                //column is for example "City" and some row has "Boston" in it, so I put this row into dt1
                if (row["ColumnName"].ToString() == "something")
                {
                    dt1.ImportRow(row);
                }
                else if (...)
                {  } //for other DataTables dt2, dt3, etc...

                else .......... ;
            }


            //here I put resulting DataTables into one DataSet which is returned
            string[] cols= { "dt1", "dt2", "dt3" };

            foreach (string col in cols)
            {
                dsOut.Tables.Add(col);
            }

            return dsOut;

        }
    }

因此,使用此返回的DataSet,我将使用一个DataTable显示新的Windows

foreach (DataTable dtt in ds.Tables)
                    {
                        string msg = dtt.TableName;
                        Window2 win2 = new Window2(dtt, msg);
                        win2.Show();
                    }

所有我看到的是带有“空DataGrid”占位符的Windows Windows代码是正确的,因为它适用于“unsplit DataTable”。

我认为拆分DataTables中的代码都是错误的,因为它不会输出带有填充DataTables的DataSet。我将非常感谢对此问题的任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

你不需要在这里使用for循环

替换以下代码

string[] cols= { "dt1", "dt2", "dt3" };

foreach (string col in cols)
   {
     dsOut.Tables.Add(col);
   }

有了这个

dsOut.Tables.Add(dt1);
dsOut.Tables.Add(dt2);
dsOut.Tables.Add(dt3);

答案 1 :(得分:0)

感谢@Krishna,我解决了这个问题。因此,如果您遇到过类似的问题,请注意以下两点:

string[] cols = { "dt1", "dt2", "dt3", ... };

            foreach (string col in cols)
            {
                dsOut.Tables.Add(col);
            }

此循环无法访问具有相同名称的DataTables对象,并且只将空DataTable写入DataSet集合(无论名称相同!)。

如果你创建了新的DataTable,并且你将把它作为另一个DataTable的克隆,那么就不用费心去设置它的名字了。

DataTable dt1 = new DataTable();

制作与源DataTable格式相同的新DataTable:

dt1 = sourceDataTable.Clone();
dt2 = sourceDataTable.Clone();
//etc...

现在,您必须为从源DataTable克隆的每个DataTable设置唯一的DataTable名称:

dt1.TableName = "Name1";
dt2.TableName = "Name2";
//and so on

现在一切正常。