簡體   English   中英

如何根據某些條件更改數據表中的特定列數據

[英]How to change specific column data in the datatable according to some condition

我有以下情況:

我根據通過按鈕輸入的用戶數據將Datatable dtItems添加到Datatable dtItems

我的數據表中的一列是Hours ,我想實現以下條件:

  • 1-每個用戶的總小時數小於或等於5。
  • 2-默認值:如果用戶輸入一行,則小時數= 5

    如果他輸入兩行,則使第一個為4,第二個為1

    如果他輸入三行,則使第一行為3,第二行為1,第三行為1。

    等等

  • 3每個用戶的最大行數是5。

像這樣:

user_id | 名稱| 小時


323 | 喬| 3

323 | 喬| 1個

323 | 喬| 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;

我假設您不知道如何在將數據行的“ Hour字段插入數據庫之前相應地進行更改。

您唯一需要知道的是第一個DataRow的新hour ,其他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中的每個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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM