|
■No90487 (河童 さん) に返信 > uf.day1 = d.taion //?dateが「1」のときに、day1に体温をセットしたいです。
"1" という文字列から day1 プロパティにアクセスしようとすると、 リフレクション頼りになってしまいますね。
この場合は UserInfo クラスに手を加えて、 uf.day[d.date] = d.taion; あるいは uf[d.date] = d.taion; の形でアクセスできるよう改修してみては如何でしょう?
private void Form1_Load(object sender, EventArgs e) { #region サンプルデータ d_dataList = new List<d_data> { new d_data { date = "1", user_id = "1", taion = "36"}, new d_data { date = "2", user_id = "1", taion = "38"}, new d_data { date = "3", user_id = "1", taion = "39"}, new d_data { date = "1", user_id = "2", taion = "35"}, new d_data { date = "2", user_id = "2", taion = "37"}, new d_data { date = "3", user_id = "2", taion = "36"}, }; userList = new List<m_User> { new m_User { user_id = "1", user_name = "testA", user_kana = null }, new m_User { user_id = "2", user_name = "testB", user_kana = null }, }; #endregion
// データグリッドのソース作成 var dictList = userList.ToDictionary(k => k.user_id); List<UserInfo> list = d_dataList .GroupBy(x => x.user_id, x => new { x.date, x.taion }) .Select(y => new UserInfo(y.ToDictionary(k => k.date, v => v.taion)) { user_id = dictList[y.Key].user_id, user_name = dictList[y.Key].user_name, user_kana = dictList[y.Key].user_kana }).ToList();
// ソースセット this.dgvRiyojoho.DataSource = list; }
public class UserInfo { private readonly Dictionary<string, string> days; public UserInfo() { this.days = new Dictionary<string, string>(); } public UserInfo(IDictionary<string, string> days) { this.days = new Dictionary<string, string>(days); } private string getDay(string d) { return days.ContainsKey(d) ? days[d] : null; }
public string user_id { get; set; } public string user_name { get; set; } public string user_kana { get; set; }
public string day1 { get { return getDay("1"); } set { days["1"] = value; } } public string day2 { get { return getDay("2"); } set { days["2"] = value; } } public string day3 { get { return getDay("3"); } set { days["3"] = value; } } public string day4 { get { return getDay("4"); } set { days["4"] = value; } } // 以下略 }
|