2012-02-05 96 views
0

我有以下的情况下更改特定的列数据在数据表:如何根据某些条件

我按行根据通过一个按钮,用户数据条目添加一行Datatable dtItems

一个在我的数据表中的列是Hours,并且我想达到以下条件:

  • 1-每个用户的总小时数是小于或等于5。
  • 2 - 默认:如果用户输入一个行然后小时= 5

    如果他输入两行则使第一个4和第二个是1

    如果他输入三行然后使第一个是3,第二个是1,第三个是1

  • 3-最大行数的每个用户数为5

这样的:

user_id |名称|小时


323 | jo | 3

323 | jo | 1

323 | jo | 1

324 | jack | 4

324 | jack | 1


DataTable dtItems = GetDataTable(); 
DataRow dr = dtItems.NewRow(); 
dr["emp_num"] = txt_EmpNum.Text.Trim(); 
dr["name"] = txt_EmpName.Text.Trim(); 
dr["hours"] = 5; 
dtItems.Rows.Add(dr); 

GV_Employee.DataSource = dtItems; 
GV_Employee.DataBind(); 

Session["ItemDT"] = dtItems; 
+1

和问题。 。 ? – 2012-02-05 11:36:18

回答

1

我以为你不知道如何改变的DataRow的Hour领域,你将它们插入到相应的数据库之前。

唯一你需要知道的是第一的DataRow的新hour什么,别人送1时:

var firstHour = 5 + 1 - dtItems.Rows.Count; //where 5 is your MaxCount 
for (var i = 0; i < dtItems.Rows.Count; i++) { 
    if (i == 0) 
     dtItems.Rows[i]["hours"] = firstHour; 
    else 
     dtItems.Rows[i]["hours"] = 1; 
} 

为了防止用户将超过5行,你只需要检查dtItems.Rows.Count < 5在插入新的之前。


编辑:如果你需要它在作为评论的DataTableemp_num计算:

var q = from r in dtItems.AsEnumerable() 
     group r by r["emp_num"]; 

foreach(var empGrp in q){ 
    var rows=empGrp.ToList(); 
    var firstHour = 5 + 1 - rows.Count; 
    for (var i = 0; i < rows.Count; i++){ 
     if (i == 0) 
      rows[i]["hours"] = firstHour; 
     else 
      rows[i]["hours"] = 1; 
    } 
} 
+0

我想要它emp_num – 2012-02-06 08:12:52

+1

@just_name:看我的编辑。 – 2012-02-06 08:16:44

+0

非常感谢,嗯,不,我想'所有员工',但条件是'emp_num',请看上面的表格,我编辑它以澄清这个想法 – 2012-02-06 08:35:57