2012-02-05 108 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

相關問題