如何根据某些条件更改数据表中的特定列数据

本文关键字:数据 数据表 何根 条件 | 更新日期: 2023-09-27 18:22:26

我有以下情况:

我根据用户通过按钮输入的数据,逐行添加到Datatable dtItems中。

我的数据表中的一列是Hours,我想实现以下条件:

  • 1-对于每个用户,总小时数小于或等于5
  • 2-默认值:如果用户输入一行,则小时=5

    如果他进入两行,那么第一行为4,第二行为1

    如果他进入三行,那么第一行为3,第二行为1,第三行为1。

    等等。

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

像这样:

user_id | name | hours


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;

如何根据某些条件更改数据表中的特定列数据

我假设在将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


编辑:如果您需要为DataTable中的每个emp_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;
    }
}