datatable的列操作2

//两列求值

dc = new DataColumn
            {
                ColumnName = "TOTAL",
                Caption = "ID*QTY",
                DataType = typeof(decimal),
                Expression="ID*QTY"
            };
            dataTable1.Columns.Add(dc);

//改变列状态

decimal realityMoney = Convert.ToDecimal(dt.Columns["实际"]);

//遍历DataTable,取出所有的ID :
List<int> lstID = (from d in dt.AsEnumerable() select d.Field<int>("ID")).ToList();

//获取表中的a,b两列

DataTable2 = DataTable1.DefaultView.ToTable(false, "a", "b");

-----------//修改类型
DataTable datNew = dt.DefaultView.ToTable(false, new string[] { "计划", "实际" });
datNew.Columns.Add("CompletionRate", typeof(Decimal), null).SetOrdinal(2);//第3列

//新表
DataTable newDt = new DataTable();
List<string> listColums = new List<string>();
//复制表结够
newDt = datNew.Clone();

//新表中的列数据类型为string 的改为Decmail
foreach (DataColumn col in newDt.Columns)
{
listColums.Add(col.ColumnName);
if (col.DataType.FullName == "System.String")
{
col.DataType = Type.GetType("System.Decimal");
}
}

foreach (DataRow row in dt.Rows)
{
DataRow newDtRow = newDt.NewRow();
//DataRow newDtRow1 = dt.NewRow();
foreach (DataColumn column in dt.Columns)
{
if (column.DataType.FullName == "System.String")
{
newDtRow["计划"] = Convert.ToDecimal(row["计划"]);
newDtRow["实际"] = Convert.ToDecimal(row["实际"]);
newDtRow["CompletionRate"] = (Convert.ToDecimal(row["实际"]) == 0 ? 0 : Convert.ToDecimal(row["计划"]) / Convert.ToDecimal(row["实际"]));
// dt.Rows.Add(newDtRow["CompletionRate"]);
//newDt.Columns["CompletionRate"].SetOrdinal(21);
}
else
{
newDtRow["计划"] = row["计划"];
newDtRow["实际"] = row["实际"];
newDtRow["CompletionRate"] = (Convert.ToDecimal(row["实际"]) == 0 ? 0 : Convert.ToDecimal(row["计划"]) / Convert.ToDecimal(row["实际"]));
//newDt.Columns["CompletionRate"].SetOrdinal(21);
}
}
newDt.Rows.Add(newDtRow);

}

}

猜你喜欢

转载自www.cnblogs.com/adle/p/10239903.html
今日推荐