/// <summary>
        /// 予約情報の再描画
        /// </summary>
        private void ReloadReserveViewItem()
        {
            try
            {
                tunerReserveView.ClearInfo();
                tunerReserveTimeView.ClearInfo();
                tunerReserveNameView.ClearInfo();
                reserveList.Clear();

                var tunerList = new List <PanelItem <TunerReserveInfo> >();
                var timeSet   = new HashSet <DateTime>();

                List <TunerReserveInfo> tunerReserveList = CommonManager.Instance.DB.TunerReserveList.Values
                                                           .OrderBy(info => info.tunerID).ToList();//多分大丈夫だけど一応ソートしておく
                if (Settings.Instance.TunerDisplayOffReserve == true)
                {
                    var tuner_off = new TunerReserveInfo();
                    tuner_off.tunerID     = 0xFFFFFFFF;//IDの表示判定に使っている
                    tuner_off.tunerName   = "無効予約";
                    tuner_off.reserveList = CommonManager.Instance.DB.ReserveList.Values
                                            .Where(info => info.IsEnabled == false).Select(info => info.ReserveID).ToList();
                    tunerReserveList.Add(tuner_off);
                }

                //チューナ不足と無効予約はアイテムがなければ非表示
                tunerReserveList.RemoveAll(item => item.tunerID == 0xFFFFFFFF && item.reserveList.Count == 0);

                double singleWidth = Settings.Instance.TunerWidth;
                double leftPos     = 0;
                var    resDic      = CommonManager.Instance.DB.ReserveList;
                tunerReserveList.ForEach(info =>
                {
                    var cols = new List <List <ReserveViewItem> >();
                    foreach (ReserveData resInfo in info.reserveList.Where(id => resDic.ContainsKey(id) == true).Select(id => resDic[id]).OrderBy(res => res.Create64Key()))//.ThenBy(res => res.StartTimeActual))
                    {
                        var newItem = new TunerReserveViewItem(resInfo)
                        {
                            Width = singleWidth
                        };
                        reserveList.Add(newItem);

                        //横位置の設定・列を拡げて表示する処置
                        var addCol = cols.FindIndex(col => col.All(item =>
                                                                   MenuUtil.CulcOverlapLength(resInfo.StartTime, resInfo.DurationSecond, item.Data.StartTime, item.Data.DurationSecond) <= 0));
                        if (addCol < 0)
                        {
                            addCol = cols.Count;
                            cols.Add(new List <ReserveViewItem>());
                        }
                        cols[addCol].Add(newItem);
                        newItem.LeftPos = leftPos + addCol * singleWidth;

                        //マージン込みの時間でリストを構築
                        ViewUtil.AddTimeList(timeSet, resInfo.StartTimeActual, resInfo.DurationActual);
                    }
                    double tunerWidth = singleWidth * Math.Max(1, cols.Count);
                    tunerList.Add(new PanelItem <TunerReserveInfo>(info)
                    {
                        Width = tunerWidth
                    });
                    leftPos += tunerWidth;
                });

                //縦位置の設定
                var timeList = new List <DateTime>(timeSet.OrderBy(time => time));

                reserveList.ForEach(item =>
                {
                    ViewUtil.SetItemVerticalPos(timeList, item, item.Data.StartTimeActual, item.Data.DurationActual, Settings.Instance.TunerMinHeight, true);

                    //ごく小さいマージンの表示を抑制する。
                    item.TopPos = Math.Round(item.TopPos);
                    item.Height = Math.Round(item.Height);
                });

                //最低表示行数を適用。また、最低表示高さを確保して、位置も調整する。
                ViewUtil.ModifierMinimumLine(reserveList, Settings.Instance.TunerMinimumLine, Settings.Instance.TunerFontSizeService, Settings.Instance.TunerBorderTopSize);

                //必要時間リストの修正。最低表示行数の適用で下に溢れた分を追加する。
                ViewUtil.AdjustTimeList(reserveList, timeList, Settings.Instance.TunerMinHeight);

                tunerReserveTimeView.SetTime(timeList, false, true);
                tunerReserveNameView.SetTunerInfo(tunerList);
                tunerReserveView.SetReserveList(reserveList,
                                                leftPos,
                                                timeList.Count * 60 * Settings.Instance.TunerMinHeight);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); }
        }