比如有如下一个 DataTable:
1 DataTable dtRowdata = { 2 [0] {[remark, "测试备注"]},//[索引] {[属性,值]} 3 [1] {[add_time, "20140110100505123"]}, 4 [2] {[add_by, "测试账号"]}, 5 [4] {[delete_time, "20140112110512425"]}, 6 [5] {[delete_by,"测试账号" ]} 7 }
是否有简单的方式统一设置 属性名包含 time的属性值设置为 当前时间.
此处是设置(add_time,delte_time) =DateTime.Now().Tostring();
我不是想要在 设计数据表时设置 DataColumn 的默认值,我的情况是从数据库中获取了资料 并保存在DataTable 中,现在我想栏位名称包含 time的属性值设置为 当前时间。
@Cornelius:
1、你如何把数据保存在 DataTable 中的?
2、是在第一次将数据保存到 DataTable 中之前修改属性值,还是可以在数据保存到 DataTable 之后的任何时候都可以访问 DataTable 并设置新的属性值?
3、是修改 DataTable 中某一条记录的属性值,还是修改 DataTable 中某几条或者全部记录的属性值?
@Launcher:
1:
1 DataTable dt = SqlHelper.ExecuteDataTable(BOMSPName.GetData, CommandType.StoredProcedure, alParameters);
2:数据保存到 DataTable 之后,立即更新DataTable 的属性值。
3:是修改 DataTable 中某几条(属性名含“time”的属性)记录的属性值?
@Cornelius: 是这样吗?
DataRow[] foundRows= dt.Select("add_by = '测试账号'");
DateTime dt = DateTime.Now;
for (int i = 0; i < foundRows.Length; i++)
{
DataRow row = foundRows[i];
row["add_time"]=dt;
row["delete_time"]=dt;
}
@Launcher: 要更新的属性写死的。
DataRow[] foundRows= dt.Select().Where(属性名.Substring("_time")>0); DateTime dt = DateTime.Now; for (int i = 0; i < foundRows.Length; i++) { DataRow row = foundRows[i]; row[获取的属性名所在DataTable总的索引]=dt;//统一对含_time的属性设置值. }
现在是不知道我改动的你的那两行代码,使用尽量简单的写法是要怎么写。
@Launcher: 要更新的属性不是写死的
@Cornelius:
DataRow[] foundRows= dt.Select().Where(属性名.Substring("_time")>0);
这是不正确的,因为在 DataTable 中的所有记录都会有 add_time 和 delete_time 两个字段,因此我不知道你这样的筛选条件有什么意义。还请将你的问题描述清楚。
@Launcher: 不好意思,,是我前面回复错误了。是更新 全部记录中属性名 含_time的属性值。
DataRow[] foundRows= dt.Select().Where(属性名.Substring("_time")>0);
这条语句是不正确,只是为表述此行代码用意。
@Cornelius:
var columns = dt.Columns.Select(o=> o.ColumnName.Contans("_time"));
DateTime dt = DateTime.Now;
foreach(DataRow row in dt.Rows)
{
DataRow row = dt.Rows[i];
foreach(DataColumn col in columns)
row[col]= dt;
}
@Launcher: 3Q!!
@Launcher: C# 里 var columns = dt.Columns.Select(o=> o.ColumnName.Contans("_time"));
这句是不正确。
@Cornelius: var columns = dt.Columns.Cast<DataColumn>().Select(o=> o.ColumnName.Contans("_time"));
自己写一个函数把这个功能包起来,然后你前面看到的代码就只有一行了。
我是在想是否有更简单的实现方式,比如像Linq 实现更新dt对象更新什么的,,有点眉目了,我再研究一下.
for(int i = 0; i < dt.Rows.Count; i++){ dt.Rows[i]["你的列"] = 修改的值;}