首页 新闻 会员 周边

C# 如何更新DataTable中某些属性值?

0
悬赏园豆:50 [已解决问题] 解决于 2015-01-12 11:28

比如有如下一个 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();

Cornelius的主页 Cornelius | 初学一级 | 园豆:80
提问于:2015-01-12 10:11
< >
分享
最佳答案
0
收获园豆:40
Launcher | 高人七级 |园豆:45045 | 2015-01-12 10:20

我不是想要在 设计数据表时设置 DataColumn 的默认值,我的情况是从数据库中获取了资料 并保存在DataTable 中,现在我想栏位名称包含 time的属性值设置为 当前时间。

Cornelius | 园豆:80 (初学一级) | 2015-01-12 10:32

@Cornelius: 

1、你如何把数据保存在 DataTable 中的?

2、是在第一次将数据保存到 DataTable 中之前修改属性值,还是可以在数据保存到 DataTable 之后的任何时候都可以访问 DataTable 并设置新的属性值?

3、是修改 DataTable 中某一条记录的属性值,还是修改 DataTable 中某几条或者全部记录的属性值?

Launcher | 园豆:45045 (高人七级) | 2015-01-12 10:37

@Launcher: 

1:

1 DataTable dt = SqlHelper.ExecuteDataTable(BOMSPName.GetData, CommandType.StoredProcedure, alParameters);

2:数据保存到 DataTable 之后,立即更新DataTable 的属性值。

3:是修改 DataTable 中某几条(属性名含“time”的属性)记录的属性值?

Cornelius | 园豆:80 (初学一级) | 2015-01-12 10:48

@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 | 园豆:45045 (高人七级) | 2015-01-12 10:57

@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的属性设置值.
}

现在是不知道我改动的你的那两行代码,使用尽量简单的写法是要怎么写。

Cornelius | 园豆:80 (初学一级) | 2015-01-12 11:11

@Launcher: 要更新的属性不是写死的

Cornelius | 园豆:80 (初学一级) | 2015-01-12 11:12

@Cornelius: 

DataRow[] foundRows= dt.Select().Where(属性名.Substring("_time")>0);

这是不正确的,因为在 DataTable 中的所有记录都会有 add_time 和 delete_time 两个字段,因此我不知道你这样的筛选条件有什么意义。还请将你的问题描述清楚。

Launcher | 园豆:45045 (高人七级) | 2015-01-12 11:14

@Launcher: 不好意思,,是我前面回复错误了。是更新 全部记录中属性名 含_time的属性值。

DataRow[] foundRows= dt.Select().Where(属性名.Substring("_time")>0);

这条语句是不正确,只是为表述此行代码用意。

Cornelius | 园豆:80 (初学一级) | 2015-01-12 11:19

@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 | 园豆:45045 (高人七级) | 2015-01-12 11:23

@Launcher: 3Q!!

Cornelius | 园豆:80 (初学一级) | 2015-01-12 11:26

@Launcher: C# 里 var columns = dt.Columns.Select(o=> o.ColumnName.Contans("_time"));

这句是不正确。

Cornelius | 园豆:80 (初学一级) | 2015-01-12 11:32

@Cornelius: var columns = dt.Columns.Cast<DataColumn>().Select(o=> o.ColumnName.Contans("_time"));

Launcher | 园豆:45045 (高人七级) | 2015-01-12 11:46
其他回答(2)
0

自己写一个函数把这个功能包起来,然后你前面看到的代码就只有一行了。

收获园豆:10
爱编程的大叔 | 园豆:30839 (高人七级) | 2015-01-12 10:18

我是在想是否有更简单的实现方式,比如像Linq 实现更新dt对象更新什么的,,有点眉目了,我再研究一下.

支持(0) 反对(0) Cornelius | 园豆:80 (初学一级) | 2015-01-12 10:24
0

for(int i = 0; i < dt.Rows.Count; i++){ dt.Rows[i]["你的列"] = 修改的值;}

隔壁老王来了 | 园豆:99 (初学一级) | 2015-01-12 10:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册