2016-12-29 7 views
-1

DataTableの同じ列に2つの異なる値を追加します。C#のDataTableの同じ列に異なるデータを追加します

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

シナリオは、セッション2015-16と2016-17の両方に開始日と終了日とIDがあります。 2番目のセッションの開始日が2番目のセッションのIDをsessionIDの列に追加する必要がある場合は、それが必要です。例については

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 

日は罰金の追加けどさ:その後、DataTableには次のようになりしなければならないセッション2015から16のIDが50で、セッション2016から17のIDが70でありますセッション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

私はあなたがしたいことを本当に理解していません。 1つのセルに2つの値を追加することはできません。これは意味をなさない。あなたは新しい列が必要だと思います。この行は:row0 ["sessionID"] = ss.session_id; row0 ["sessionID"] = se.session_id;毎回最初の値を上書きします。 – Sebi

+1

@Sebiは1つの列に1つのセルにはありません。日付だけで出力とコードをもう一度見てもらえます。 –

+0

しかし、ここで:row0 ["sessionID"] = ss.session_id; row0 ["sessionID"] = se.session_id; 2つの異なるセッションIDを同じセルに書き込もうとします。だから2番目の値は確実に上書きされます。 row0 ["sessionId"]のようなrowlevelの列にアクセスすると、セルレベルになります。私はあなたの唯一の問題はこの行だと思う: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); 
} 

これは中兼ね備えあなたのテーブルに到達するためのハードコードさ方法ですあなたの質問。 これがあなたを助けてくれることを願っています。あなたは単純に1つの行を毎月追加します。月が値X以上の場合、Idは別の値に設定されます。

関連する問題