【发布时间】:2011-01-05 13:36:46
【问题描述】:
我有 25 列的数据集(数据集名称 dsEmp),这里我需要添加一个新列,其列名为 EndDate,数据类型为 string。
我需要将数据类型为datetime 的第18 列中的所有数据导入新创建的数据列EndDate。一旦我们将第 18 列的所有数据导入到新列 EndDate,我们应该删除第 18 列。
【问题讨论】:
标签: c#
我有 25 列的数据集(数据集名称 dsEmp),这里我需要添加一个新列,其列名为 EndDate,数据类型为 string。
我需要将数据类型为datetime 的第18 列中的所有数据导入新创建的数据列EndDate。一旦我们将第 18 列的所有数据导入到新列 EndDate,我们应该删除第 18 列。
【问题讨论】:
标签: c#
这是你要找的东西吗:
DataSet ds = new DataSet();
DataTable dtt = new DataTable();
ds.Tables.Add(dtt);
// simulate required columns
dtt.Columns.Add("col1", typeof(int));
dtt.Columns.Add("col2", typeof(string));
//...
dtt.Columns.Add("col18", typeof(DateTime));
// pupulate with dummy date
for (int index = 0; index < 100; index++)
{
dtt.Rows.Add(index, "val" + index.ToString(), DateTime.Now.AddMinutes(index));
}
// add new column
DataColumn colEndDate = new DataColumn("EndDate", typeof(DateTime));
dtt.Columns.Add(colEndDate);
// get old column reference
DataColumn colOld18 = dtt.Columns["col18"];
// loop thru all rows
foreach (DataRow row in dtt.Rows)
{
// store value from old column to new column
row[colEndDate] = Convert.ToDateTime(row[colOld18]).ToShortDateString();
// or
row[colEndDate] = Convert.ToDateTime(row[colOld18]).ToString("MM/dd/yyyy hh:mm:ss");
}
// remove old column
dtt.Columns.Remove(colOld18);
dtt.AcceptChanges();
【讨论】:
@Prince 我为你准备了一个小班,这样你就可以用它来做你想做的事情。希望它会根据您的要求。昨天只想发布这个答案,但我的工作很忙。
类 TestAddRemoveCol { /// /// 将传递的列添加到特定位置的数据表中 /// /// /// /// /// public DataTable AddCol(DataSet ds, string colName, Type type, int location) { 数据表 dt = 新数据表(); int colIndex = 0; 数据列 dc2 = null; foreach(ds.Tables[0].Columns 中的 DataColumn 项) { 如果(colIndex == 位置) { dc2 = 新数据列(); dc2.ColumnName = colName; dc2.DataType = 类型; dt.Columns.Add(dc2); } dc2 = 新数据列(); dc2.ColumnName = item.ColumnName; dc2.DataType = item.DataType; dt.Columns.Add(dc2); colIndex++; } foreach(ds.Tables[0].Rows 中的 DataRow dr) { dt.ImportRow(dr); } 返回 dt; } /// /// 返回一个字符串类型的数据列 /// /// /// /// 公共数据表 CopyCol(数据表 dt,字符串 oldColName,字符串 newColName) { 数据表 dt2 = dt.Copy(); 对于 (int i = 0; 我 /// 从特定位置删除列 /// /// /// 公共无效 RemoveCol(数据表 dt,字符串 colName) { //删除具有特定名称的列 dt.Columns.Remove(colName); //或者 //删除特定索引处的列 //ds.Tables[0].Columns.RemoveAt(index); } }你可以像下面这样使用这个类。
//测试添加/删除列 //创建虚拟数据集进行测试 数据集 ds = new DataSet(); 数据表 dt = 新数据表(); DataColumn dc = new DataColumn("col1", typeof(DateTime)); dt.Columns.Add(dc); dc = new DataColumn("col2", typeof(DateTime)); dt.Columns.Add(dc); dc = new DataColumn("col3", typeof(DateTime)); dt.Columns.Add(dc); dc = new DataColumn("col4", typeof(DateTime)); dt.Columns.Add(dc); 数据行博士 = dt.NewRow(); dr[0] = Convert.ToDateTime("01/01/2011"); dr[1] = Convert.ToDateTime("02/01/2011"); dr[2] = Convert.ToDateTime("03/01/2011"); dr[3] = Convert.ToDateTime("04/01/2011"); dt.Rows.Add(dr); ds.Tables.Add(dt); //创建类的对象 TestAddRemoveCol obj = new TestAddRemoveCol(); //在数据集中的特定位置添加列 DataTable dt2 = obj.AddCol(ds, "EndDate", typeof(String), 2); //将数据从一列复制到另一列 数据表 dt3 = obj.CopyCol(dt2, "col3", "EndDate"); //删除具有特定名称的列 obj.RemoveCol(dt3, "col3");我检查了代码,它工作正常。此代码也适用于 .net 1.1。
问候,
萨马尔
【讨论】: