我有以下情况:
我根据用户数据条目通过按钮逐行添加到Datatable dtItems
。
我的数据表中的一列是Hours
,我想达到以下条件:
2-默认值:如果用户输入一行,则小时= 5
如果他输入两行,则使第一行为4,第二行为1
如果他输入三行,则使第一行为3,第二行为1,第三行为1.
等
喜欢这个:
user_id |名字|小时
323 | jo | 3
323 | jo | 1
323 | jo | 1
324 |杰克| 4
324 |杰克| 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;
答案 0 :(得分: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
。
修改:如果您需要按照emp_num
中的每个DataTable
计算,请注明:
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;
}
}