2016-12-29 19 views
-1

我想在DataTable的相同列中添加兩個不同的值。在C#中的DataTable的同一列中添加不同的數據

row0["sessionID"] = ss.session_id; 
row0["sessionID"] = se.session_id; 

情景是我必須參加2015-16和2016-17的會議,他們都有開始日期和結束日期以及ID。我想如果第二次會話的開始日期發生,則必須將第二次會話的ID添加到sessionID列中。

例如:會議2015-16的ID是50,會議2016-17的ID是70,則數據表必須是這個樣子:

SessionID  Session Date 
____________________________ 
50    2015-10-01 
50    2015-11-01 
50    2015-12-01 
50    2016-01-01 
50    2016-02-28 
70    2016-03-01 
70    2016-04-01 
70    2016-05-01 
.     . 
.     . 
70    2017-03-31 

日期是增加罰款,但我我無法添加會話ID。我如何添加它?

這裏是我的完整代碼:

var sessionsFrom = (from o in _session.GetAll() 
         where o.session_name == ddl_SessionFrom.SelectedItem.Text 
         && o.branch_id == Convert.ToInt32(ddl_search_branch.SelectedValue) 
         select o).ToArray(); 

     var sessionsTo = (from o in _session.GetAll() 
          where o.session_id == Convert.ToInt32(ddl_SessionTo.SelectedValue) 
          && o.branch_id == Convert.ToInt32(ddl_search_branch.SelectedValue) 
          select o).ToArray(); 


     DataTable dt = new DataTable(); 
     dt.Columns.Add("id").DataType = typeof(Int32); 
     dt.Columns.Add("SessionFrom"); 
     dt.Columns.Add("SessionTo"); 
     dt.Columns.Add("Month"); 
     dt.Columns.Add("totalStudent").DataType = typeof(Int32); 
     dt.Columns.Add("totalAdmission").DataType = typeof(Int32); 
     dt.Columns.Add("totLefts").DataType = typeof(Int32); 
     dt.Columns.Add("sessionID").DataType = typeof(Int32); 

     foreach (var ss in sessionsFrom) 
      foreach(var se in sessionsTo) 
     { 

      var row0 = dt.NewRow();    

      row0["totalStudent"] = totalStudent; 
      row0["SessionFrom"] = ss.session_name; 
      row0["SessionTo"] = se.session_name; 
      row0["sessionID"] = ss.session_id; 
      row0["sessionID"] = se.session_id;    

      id = id + 1; 
      row0["id"] = id; 
      ts = totalStudent; 
      dt.Rows.Add(row0); 

      for (DateTime i = ss.session_startdate; i < se.session_enddate; i = i.AddMonths(1)) 
      { 
       int a = i.Month; 
       int b = i.Year; 
       var row = dt.NewRow(); 

       row["SessionFrom"] = ss.session_name; 
       row["SessionTo"] = se.session_name; 
       row["sessionID"] = se.session_id; 
       . 
       . 
       . 
+0

我真的不明白你想要做什麼。您不能在一個單元格中添加兩個值。這是沒有道理的。你需要一個新的專欄,我認爲哪個商店session_id_2或某事。這行:row0 [「sessionID」] = ss.session_id; row0 [「sessionID」] = se.session_id;每次都會覆蓋你的第一個值。 – Sebi

+1

@Sebi不在一個單元格中,在一列中。日期加上罰款只需再次查看輸出和代碼。 –

+0

但是這裏:row0 [「sessionID」] = ss.session_id; row0 [「sessionID」] = se.session_id;您嘗試在同一個單元格中寫入兩個不同的會話ID。所以第二個值肯定會覆蓋。如果你像row0 [「sessionId」]那樣訪問rowlevel的列,那麼你就會進入celllevel。我認爲你唯一的問題是這一行:row0 [「sessionID」] = se.session_id;在你的foreach裏面。殺死它並檢查它是否有效。 – Sebi

回答

0

下面的代碼創建一個DataTable,它在你的問題達到自己的示例表:

//Help Method to iterate over Dates 
public IEnumerable<DateTime> EachMonth(DateTime from, DateTime thru) 
{ 
    for(var month = from.Date; month.Date <= thru.Date; month = month.AddMonth(1)) 
     yield return month; 
} 

DataTable dt = new DataTable(); 
dt.Columns.Add("SessionID").DataType = typeof(Int32); 
dt.Columns.Add("SessionDate").DataType = typeof(DateTime); 

//Iterate all Dates from 01.01.2015 to 01.03.2017 
foreach (DateTime date in EachMonth(new DateTime(2015,1,1), new DateTime(2017,3,1)) 
{ 
    DataRow row = dt.NewRow(); 

    //Check if the magic Date is reached. After this ID jumps to 70 
    if (date.CompareTo(new DateTime(2016, 2, 28)) <= 0) 
    { 
     row["SessionID"] = 50; 
    } 
    else 
    { 
     row["SessionID"] = 70; 
    } 

    row["SessionDate"] = date; 
    dt.Rows.Add(row); 
} 

這是爲了達到你的表中較受歡迎的硬編碼的方式你的問題。 我希望這可以幫助你。你簡單地每個月添加一行。如果月份高於X值,則您的ID設置爲另一個值。

相關問題