{"id":3143,"date":"2020-02-19T16:56:12","date_gmt":"2020-02-19T07:56:12","guid":{"rendered":"https:\/\/okamurax.com\/?p=3143"},"modified":"2024-05-03T19:03:03","modified_gmt":"2024-05-03T10:03:03","slug":"c-datagridview-%e3%82%bb%e3%83%ab%e3%81%ae%e7%96%91%e4%bc%bc%e7%9a%84%e7%b5%90%e5%90%88","status":"publish","type":"post","link":"https:\/\/appbay.org\/?p=3143","title":{"rendered":"C# DataGridView \u30bb\u30eb\u306e\u7d50\u5408"},"content":{"rendered":"<p>\u4eca\u56de\u306f\u6a19\u6e96\u30d8\u30c3\u30c0\u30fc\u3092\u5229\u7528\u305b\u305a1\u884c\u76ee2\u884c\u76ee\u3092\u30d8\u30c3\u30c0\u30fc\u3068\u3057\u3066\u5229\u7528\u3057\u3066\u304a\u308a\u3001\u8a66\u3057\u306b1\u884c\u76ee\u306e1\u5217\u76ee2\u5217\u76ee\u3092\u64ec\u4f3c\u7684\u7d50\u5408\u3057\u3066\u307f\u305f\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6304\" src=\"\/wp-content\/uploads\/2020\/02\/03143_1-1.jpg\" alt=\"\" width=\"990\" height=\"637\" srcset=\"https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_1-1.jpg 990w, https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_1-1-300x193.jpg 300w, https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_1-1-768x494.jpg 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>\u3069\u3053\u306e\u30b5\u30a4\u30c8\u3082\u3060\u3044\u305f\u3044\u540c\u3058\u8aac\u660e\u3092\u3057\u3066\u3044\u3066\u3001CellPainting()\u3067\u51e6\u7406\u3059\u308b\u306e\u304c\u57fa\u672c\u3068\u3044\u3046\u611f\u3058\u3002\u3061\u3087\u3063\u3068\u3064\u307e\u3065\u3044\u305f\u306e\u304c\u6a19\u6e96\u63cf\u753b(\u30bb\u30eb\u306e\u80cc\u666f\u8272\u3068\u304b\u6587\u5b57\u5217\u3068\u304b)\u3067\u7591\u4f3c\u7684\u7d50\u5408\u306eRetangle\u304c\u96a0\u308c\u3066\u3057\u307e\u3046\u73fe\u8c61\u3067\u3001\u56de\u907f\u3059\u308b\u305f\u3081\u306b\u306fe.Handled = true\u3067\u6a19\u6e96\u63cf\u753b\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u3063\u305f\u3002<\/p>\n<p>\u4f8b\u3048\u3070\u4eca\u56de\u306f\u5229\u7528\u3057\u306a\u3044\u3051\u3069\u3001\u6a19\u6e96\u63cf\u753b\u306e\u4e00\u90e8\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3059\u308b\u5834\u5408\u3001e.Paint()\u3067\u6a19\u6e96\u63cf\u753b\u3092\u547c\u3073\u3001e.Handled = true\u3067\u7d42\u4e86\u3055\u305b\u308b\u3002<br \/>\n<span style=\"color: #0000ff;\">var p = e.PaintParts &amp; ~DataGridViewPaintParts.Border;<\/span><br \/>\n<span style=\"color: #0000ff;\">e.Paint(e.ClipBounds, p);<\/span><br \/>\n<span style=\"color: #0000ff;\">e.Handled = true;<\/span><br \/>\n\u3053\u308c\u3067Border\u306e\u63cf\u753b\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u308b\u3002<\/p>\n<pre class=\"lang:c# decode:true\">            DataGridView.CellPainting += (s, e) =&gt;\r\n            {\r\n                if (e.RowIndex != 0) return; \/\/ Rows[0]\u306e\u307f\r\n\r\n                if (e.ColumnIndex == 1)\r\n                {\r\n                    e.Handled = true;\r\n                    \/\/ e.Handled = true\u3067\u63cf\u753b\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3067\u304d\u308b\u3002\r\n                    \/\/ \u63cf\u753b\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u30bb\u30eb\u306e\u307fRectangle\u306e\u63cf\u753b\u304c\u512a\u5148\u3055\u308c\u308b\u3002\r\n                    \/\/ \u3053\u3053\u3067Columns[1]\u306e\u63cf\u753b\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u306a\u3044\u3068\r\n                    \/\/ Columns[0]\u306e\u63cf\u753b\u304c\u5f8c\u308d\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u3002\r\n\r\n                    \/\/ DoubleBuffered\u304c\u6709\u52b9\u306e\u5834\u5408\u30b9\u30af\u30ed\u30fc\u30eb\u306a\u3069\u3067\u753b\u9762\u5916\u306b\u306a\u3063\u305f\u3068\u304d\u306e\r\n                    \/\/ Columns[1]\u306e\u9ed2\u5857\u9818\u57df\u304c\u76f4\u3089\u306a\u3044\u3002\r\n                }\r\n\r\n                if (e.ColumnIndex == 0)\r\n                {\r\n                    DataGridView dgv = (DataGridView)s;\r\n\r\n                    Rectangle newRect = new Rectangle(\r\n                        e.CellBounds.X-1,\r\n                        e.CellBounds.Y-1,\r\n                        e.CellBounds.Width + dgv.Columns[e.ColumnIndex+1].Width,\r\n                        e.CellBounds.Height);\r\n\r\n                    e.Graphics.FillRectangle(Brushes.White, newRect);\r\n                    e.Graphics.DrawRectangle(new Pen(dgv.GridColor), newRect);\r\n\r\n                    StringFormat sf = new StringFormat();\r\n                    sf.Alignment = StringAlignment.Center;\r\n                    sf.LineAlignment = StringAlignment.Center ;\r\n                    e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;\r\n                    e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Black, newRect, sf);\r\n\r\n                    e.Handled = true;\r\n                    \r\n                }\r\n\r\n            };\r\n<\/pre>\n<p>\uff0a\uff0a\uff0a<\/p>\n<p>\u6b21\u306f\u64ec\u4f3c\u7684\u7d50\u5408\u306e\u7bc4\u56f2\u3092\u30eb\u30fc\u30d7\u3067\u52d5\u7684\u306b\u53d6\u5f97\u3057\u3066\u307f\u305f\u30021\u884c\u76ee1\uff5e5\u5217\u76ee\u307e\u3067\u306f\u7f6b\u7ddaBottom\u3092\u6d88\u3059\u3060\u3051\u3067\u3001\u305d\u308c\u4ee5\u964d\u306e1\u884c\u76ee6\u5217\u76ee\u4ee5\u964d(\u5e74\u6708\u306e\u90e8\u5206)\u3092\u7591\u4f3c\u7684\u7d50\u5408\u3057\u3066\u3044\u308b\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6305\" src=\"\/wp-content\/uploads\/2020\/02\/03143_2-1.jpg\" alt=\"\" width=\"990\" height=\"637\" srcset=\"https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_2-1.jpg 990w, https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_2-1-300x193.jpg 300w, https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_2-1-768x494.jpg 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>\u63cf\u753b\u30bb\u30eb(1\u884c\u76ee6\u5217\u76ee)\u304c\u753b\u9762\u304b\u3089\u6d88\u3048\u306a\u3044(\u898b\u3048\u306a\u304f\u306a\u308b\u3053\u3068\u304c\u306a\u3044)\u4f5c\u308a\u306a\u3089\u3053\u308c\u3067\u554f\u984c\u306a\u3044\u306e\u3060\u3051\u3069\u3001\u6a2a\u30b9\u30af\u30ed\u30fc\u30eb\u306a\u3069\u3067\u63cf\u753b\u30bb\u30eb\u304c\u753b\u9762\u304b\u3089\u6d88\u3048\u308b\u3068\u7591\u4f3c\u7684\u7d50\u5408\u306eRectangle\u3082\u6d88\u3048\u3066\u9ed2\u5857\u308a\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u3068\u3044\u3046\u5384\u4ecb\u306a\u554f\u984c\u304c\u767a\u751f\u3059\u308b\u3002<\/p>\n<p>\u30b9\u30af\u30ed\u30fc\u30eb\u306e\u72b6\u614b\u304b\u3089\u63cf\u753b\u30bb\u30eb\u3092\u4fee\u6b63\u3059\u308b\u3088\u3046\u306a\u8a08\u7b97\u3092\u3059\u308c\u3070\u56de\u907f\u3067\u304d\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u3051\u3069\u3001\u304b\u306a\u308a\u9762\u5012\u3060\u3057CellPainting()\u306f\u983b\u7e41\u306b\u547c\u3070\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u3042\u307e\u308a\u8907\u96d1\u306a\u8a08\u7b97\u3082\u3057\u305f\u304f\u306a\u3044\u3002<\/p>\n<pre class=\"lang:c# decode:true\">            DataGridView.CellPainting += (s, e) =&gt;\r\n            {\r\n                if (e.RowIndex != 0) return; \/\/ 1\u884c\u76ee\u306e\u307f\r\n     \r\n                if (e.ColumnIndex &lt; _StartDateColumn)\r\n                {\r\n                    \/\/ \u7f6b\u7dda\u975e\u8868\u793a\r\n                    e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;\r\n                }\r\n                else if (e.ColumnIndex &gt;= _StartDateColumn)\r\n                {\r\n                    if (Convert.ToString(e.Value) == \"\")\r\n                    {\r\n                        e.Handled = true; \/\/ \u901a\u5e38\u306e\u63cf\u753b\u3092\u547c\u3070\u306a\u3044\u3002\r\n                    }\r\n                    else\r\n                    {\r\n                        DataGridView dgv = (DataGridView)s;\r\n                        int totalWidth = 0; \r\n\r\n                        int c = e.ColumnIndex;\r\n                        do\r\n                        {\r\n                            totalWidth += dgv.Columns[c].Width;\r\n                            c++;\r\n                        }\r\n                        while (c &lt; dgv.Columns.Count &amp;&amp; Convert.ToString(dgv.Rows[0].Cells[c].Value) == \"\");\r\n\r\n                        Rectangle rect = new Rectangle(e.CellBounds.X - 1, e.CellBounds.Y - 1, totalWidth, e.CellBounds.Height);\r\n                        e.Graphics.FillRectangle(Brushes.AliceBlue, rect);\r\n                        e.Graphics.DrawRectangle(new Pen(dgv.GridColor), rect);\r\n                        var stringFormat = new StringFormat();\r\n                        stringFormat.Alignment = StringAlignment.Center;\r\n                        stringFormat.LineAlignment = StringAlignment.Center;\r\n                        e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;\r\n                        e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Black, rect, stringFormat);\r\n\r\n                        e.Handled = true; \/\/ \u901a\u5e38\u306e\u63cf\u753b\u3092\u547c\u3070\u306a\u3044\u3002\r\n                    }\r\n                }\r\n            };\r\n<\/pre>\n<p>\uff0a\uff0a\uff0a<\/p>\n<p>\u3061\u306a\u307f\u306b\u3001CellPainting()\u3067\u306f\u306a\u304fPaint()\u3067\u51e6\u7406\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u308b\u3002\u30a4\u30d9\u30f3\u30c8\u5f15\u6570\u304b\u3089CellBounds\u3092\u53d6\u308c\u306a\u3044\u306e\u3067\u3001\u76f4\u63a5DataGridView\u3067\u6307\u5b9a\u3059\u308b\u3060\u3051\u3002<\/p>\n<pre class=\"lang:c# decode:true\">            DataGridView.Paint += (s, e) =&gt;\r\n            {\r\n                DataGridView dgv = (DataGridView)s;\r\n                int totalWidth = 0;\r\n\r\n                int c = 5;\r\n                do\r\n                {\r\n                    totalWidth += dgv.Columns[c].Width;\r\n                    c++;\r\n                }\r\n                while (c &lt; dgv.Columns.Count &amp;&amp; Convert.ToString(dgv.Rows[0].Cells[c].Value) == \"\");\r\n\r\n                Rectangle rect = new Rectangle(\r\n                    dgv.GetCellDisplayRectangle(5, 0, true).X - 1,\r\n                    dgv.GetCellDisplayRectangle(5, 0, true).Y - 1,\r\n                    totalWidth,\r\n                    dgv.GetCellDisplayRectangle(5, 0, true).Height\r\n                    );\r\n\r\n                e.Graphics.FillRectangle(Brushes.AliceBlue, rect);\r\n                e.Graphics.DrawRectangle(new Pen(dgv.GridColor), rect);\r\n                var stringFormat = new StringFormat();\r\n                stringFormat.Alignment = StringAlignment.Center;\r\n                stringFormat.LineAlignment = StringAlignment.Center;\r\n                e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;\r\n                e.Graphics.DrawString(\"2000\/01\/01\", dgv.Font, Brushes.Black, rect, stringFormat);\r\n            };<\/pre>\n<p>\uff0a\uff0a\uff0a<\/p>\n<p>\u8272\u3005\u8003\u3048\u305f\u3051\u3069\u3001\u7d50\u5c40\u3001Rectangle\u306e\u64ec\u4f3c\u7684\u7d50\u5408\u306f\u6b62\u3081\u3066\u3001CellPainting()\u3067\u306f\u7f6b\u7dda\u3060\u3051\u51e6\u7406\u3057\u305f\u3002Alignment\u3067\u4e2d\u592e\u306b\u3067\u304d\u306a\u3044\u3057\u9577\u3044\u6587\u5b57\u5217\u3082\u8a2d\u5b9a\u3067\u304d\u306a\u3044\u304c\u3001\u63cf\u753b\u843d\u3061\u3059\u308b\u3088\u308a\u306f\u3044\u3044\u304b\u306a\u3068\u3044\u3046\u611f\u3058\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6306\" src=\"\/wp-content\/uploads\/2020\/02\/03143_3-1.jpg\" alt=\"\" width=\"768\" height=\"494\" srcset=\"https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_3-1.jpg 768w, https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_3-1-300x193.jpg 300w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<pre class=\"lang:c# decode:true\">            DataGridView.CellPainting += (s, e) =&gt;\r\n            {\r\n                if (e.RowIndex != 0) return;\r\n\r\n                if (e.ColumnIndex &lt; _StartDateColumn) e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;\r\n                \r\n                if (e.ColumnIndex &gt;= _StartDateColumn)\r\n                {\r\n                    e.AdvancedBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None;\r\n                    e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;\r\n\r\n                    if (e.ColumnIndex &lt; DataGridView.Columns.Count - 1 &amp;&amp;\r\n                        Convert.ToString(DataGridView.Rows[0].Cells[e.ColumnIndex + 1].Value) != \"\")\r\n                    {\r\n                        e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Single;\r\n                    }\r\n\r\n                }\r\n            };\r\n<\/pre>\n<p>\uff0a\uff0a\uff0a<\/p>\n<p>\u6570\u65e5\u5f8c\u8ffd\u8a18\u3002<\/p>\n<p>\u3057\u3070\u3089\u304f\u7d4c\u3063\u3066\u304b\u3089\u601d\u3044\u3064\u3044\u305f\u306e\u304c\u753b\u50cf\u3092\u5229\u7528\u3059\u308b\u30a2\u30a4\u30c7\u30a2\u3067\u3001\u7591\u4f3c\u7684\u7d50\u5408\u306e\u30b5\u30a4\u30ba\u3067\u52d5\u7684\u306b\u753b\u50cf\u3092\u751f\u6210\u3057\u3066\u3001\u305d\u308c\u305e\u308c\u306e\u30bb\u30eb\u306e\u30b5\u30a4\u30ba\u3067\u629c\u304d\u51fa\u3057\u3066\u63cf\u753b\u3059\u308b\u3068\u3044\u3046\u65b9\u6cd5\u3002<\/p>\n<p>\u3053\u308c\u3060\u3068\u898b\u305f\u76ee\u306f\u7d50\u5408\u3055\u308c\u3066\u3044\u308b\u3051\u3069\u3001\u63cf\u753b\u306f\u30bb\u30eb\u3054\u3068\u306a\u306e\u3067\u9ed2\u5857\u308a\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u554f\u984c\u3082\u767a\u751f\u3057\u306a\u3044\u3002<\/p>\n<p>\u305f\u3060\u3053\u306e\u65b9\u6cd5\u306e\u5834\u5408\u3001\u7591\u4f3c\u7684\u7d50\u5408\u306e\u7bc4\u56f2\u3084\u30b5\u30a4\u30ba\u304c\u56fa\u5b9a\u306a\u3089\u554f\u984c\u306a\u3044\u3051\u3069\u3001\u7bc4\u56f2\u3084\u30b5\u30a4\u30ba\u304c\u52d5\u7684\u306b\u5909\u5316\u3059\u308b\u3088\u3046\u306a\u4ed5\u69d8\u3060\u3068\u304b\u306a\u308a\u8907\u96d1\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6307\" src=\"\/wp-content\/uploads\/2020\/02\/03143_4-1.jpg\" alt=\"\" width=\"990\" height=\"637\" srcset=\"https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_4-1.jpg 990w, https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_4-1-300x193.jpg 300w, https:\/\/appbay.org\/wp-content\/uploads\/2020\/02\/03143_4-1-768x494.jpg 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<pre class=\"lang:c# decode:true\">using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Drawing;\r\nusing System.Drawing.Text;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Forms;\r\n\r\nnamespace ProductionManagement\r\n{\r\n    public partial class GanttChart : Form\r\n    {\r\n        private int _StartDateColumn = 5;\r\n        private int _DateColumnWidth = 13;\r\n        private DateClass _DateClass = new DateClass();\r\n\r\n        private Bitmap[] _BitmapArray = new Bitmap[32];\r\n\r\n        public GanttChart()\r\n        {\r\n            InitializeComponent();\r\n\r\n            Binding();\r\n            InitializeTextBox();\r\n            CreateDataGridView();\r\n\r\n            SetupDataGridView();\r\n            AttachEvent();\r\n\r\n            CreateBitmap();\r\n        }\r\n\r\n        private void InitializeTextBox()\r\n        {\r\n            DateTime ym = DateTime.Now;\r\n            if (ym.Day &lt;= 20) ym = ym.AddMonths(-1);\r\n\r\n            _DateClass.\u5e74\u6708 = ym.ToString(\"yyyy\u5e74MM\u6708\");\r\n            TargetYm.Text = ym.ToString(\"yyyy\u5e74MM\u6708\");\r\n        }\r\n\r\n        private void Binding()\r\n        {\r\n            TargetYm.DataBindings.Add(\"Text\", _DateClass, \"\u5e74\u6708\");\r\n        }\r\n\r\n        private void CreateBitmap()\r\n        {\r\n            for (int i = 1; i &lt;= 31; i++)\r\n            {\r\n                var label = new Label()\r\n                {\r\n                    Text = i.ToString().PadLeft(2, '0'),\r\n                    Width = _DateColumnWidth * 3,\r\n                    Height = DataGridView.RowTemplate.Height,\r\n                    Font = DataGridView.Font,\r\n                    TextAlign = ContentAlignment.MiddleCenter,\r\n                    BackColor = Color.AliceBlue\r\n                };\r\n                var bitmap = new Bitmap(label.Width, label.Height);\r\n                label.DrawToBitmap(bitmap, label.Bounds);\r\n                _BitmapArray[i] = bitmap;\r\n            }\r\n        }\r\n\r\n        private void DrawBorder(object s, DataGridViewCellPaintingEventArgs e)\r\n        {\r\n            var refer = Convert.ToString(DataGridView.Rows[1].Cells[e.ColumnIndex].Value);\r\n\r\n            if (refer != \"\")\r\n            {\r\n                e.AdvancedBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.OutsetDouble;\r\n                \/\/ DrawLine()\u3067\u306fright\u304c\u4e0a\u624b\u304f\u8868\u793a\u3067\u304d\u306a\u3044\u3002\r\n                \/\/ DividerWidth\u3067\u306f\u30d8\u30c3\u30c0\u30fc\u90e8\u5206\u307e\u3067\u63cf\u753b\u3055\u308c\u3066\u3057\u307e\u3046\u3002\r\n            }\r\n        }\r\n\r\n        private void DrawMergeImage(object s, DataGridViewCellPaintingEventArgs e)\r\n        {\r\n            \/\/ \u753b\u50cf\u4e0a\u3067\u5207\u308a\u53d6\u308b\u4f4d\u7f6e(X,Y)\u3068\u30b5\u30a4\u30ba\u3092\u6307\u5b9a\u3059\u308b\u3002\r\n            \/\/ \u3053\u3053\u3067\u306f\u751f\u6210\u6e08\u306eWidth*3\u306e\u753b\u50cf\u304c\u3042\u308a\u3001\u305d\u306e\u753b\u50cf\u4e0a\u3067\u306e\u4f4d\u7f6e\u3068\u30b5\u30a4\u30ba\u3092\u6307\u5b9a\u3059\u308b\u3002\r\n            var src = new Rectangle(\r\n                0,\r\n                0,\r\n                e.CellBounds.Width,\r\n                e.CellBounds.Height\r\n                );\r\n\r\n            \/\/ \u30d5\u30a9\u30fc\u30e0\u4e0a\u3067\u63cf\u753b\u3059\u308b\u4f4d\u7f6e\u3092\u6307\u5b9a\u3059\u308b\u3002\r\n            var dst = new Rectangle(\r\n                e.CellBounds.X,\r\n                e.CellBounds.Y,\r\n                e.CellBounds.Width,\r\n                e.CellBounds.Height - 1\r\n                );\r\n\r\n            var refer = Convert.ToString(DataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);\r\n            var referMinus1 = Convert.ToString(DataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value);\r\n            var referMinus2 = Convert.ToString(DataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex - 2].Value);\r\n\r\n            if (refer != \"\")\r\n            {\r\n                e.Graphics.DrawImage(_BitmapArray[int.Parse(refer)], dst, src, GraphicsUnit.Pixel);\r\n\r\n                e.Graphics.DrawLine(new Pen(DataGridView.GridColor), \/\/ left\r\n                    e.CellBounds.X - 1,\r\n                    e.CellBounds.Y,\r\n                    e.CellBounds.X - 1,\r\n                    e.CellBounds.Y + e.CellBounds.Height\r\n                    \/\/ left\u3068right\u306e\u7f6b\u7dda\u304c\u91cd\u8907\u3057\u3066\u3044\u308b\u304c\u3001left\u3060\u3051\u3060\u3068\u30af\u30ea\u30c3\u30af\u3057\u305f\u3068\u304d\u306b\u7f6b\u7dda\u304c\u306a\u304f\u306a\u3063\u3066\u3057\u307e\u3046\r\n                );\r\n\r\n                e.Graphics.DrawLine(new Pen(DataGridView.GridColor), \/\/ top\r\n                    e.CellBounds.X,\r\n                    e.CellBounds.Y - 1,\r\n                    e.CellBounds.X + e.CellBounds.Width,\r\n                    e.CellBounds.Y - 1\r\n                );\r\n\r\n                e.Graphics.DrawLine(new Pen(DataGridView.GridColor), \/\/ bottom\r\n                    e.CellBounds.X,\r\n                    e.CellBounds.Y + e.CellBounds.Height - 1,\r\n                    e.CellBounds.X + e.CellBounds.Width,\r\n                    e.CellBounds.Y + e.CellBounds.Height - 1\r\n                );\r\n\r\n                e.Handled = true;\r\n            }\r\n            else if (referMinus1 != \"\")\r\n            {\r\n                src.X = e.CellBounds.Width;\r\n                e.Graphics.DrawImage(_BitmapArray[int.Parse(referMinus1)], dst, src, GraphicsUnit.Pixel);\r\n\r\n                e.Graphics.DrawLine(new Pen(DataGridView.GridColor), \/\/ top\r\n                    e.CellBounds.X,\r\n                    e.CellBounds.Y - 1,\r\n                    e.CellBounds.X + e.CellBounds.Width,\r\n                    e.CellBounds.Y - 1\r\n                );\r\n\r\n                e.Graphics.DrawLine(new Pen(DataGridView.GridColor), \/\/ bottom\r\n                    e.CellBounds.X,\r\n                    e.CellBounds.Y + e.CellBounds.Height - 1,\r\n                    e.CellBounds.X + e.CellBounds.Width,\r\n                    e.CellBounds.Y + e.CellBounds.Height - 1\r\n                );\r\n\r\n                e.Handled = true;\r\n            }\r\n            else if (referMinus2 != \"\")\r\n            {\r\n                src.X = e.CellBounds.Width + e.CellBounds.Width;\r\n                e.Graphics.DrawImage(_BitmapArray[int.Parse(referMinus2)], dst, src, GraphicsUnit.Pixel);\r\n\r\n                e.Graphics.DrawLine(new Pen(DataGridView.GridColor), \/\/ top\r\n                    e.CellBounds.X,\r\n                    e.CellBounds.Y - 1,\r\n                    e.CellBounds.X + e.CellBounds.Width,\r\n                    e.CellBounds.Y - 1\r\n                );\r\n\r\n                e.Graphics.DrawLine(new Pen(DataGridView.GridColor), \/\/ bottom\r\n                    e.CellBounds.X,\r\n                    e.CellBounds.Y + e.CellBounds.Height - 1,\r\n                    e.CellBounds.X + e.CellBounds.Width,\r\n                    e.CellBounds.Y + e.CellBounds.Height - 1\r\n                );\r\n\r\n                if (e.RowIndex == 1)\r\n                {\r\n                    e.Graphics.DrawLine(new Pen(DataGridView.GridColor), \/\/ right\r\n                        e.CellBounds.X + e.CellBounds.Width - 1,\r\n                        e.CellBounds.Y,\r\n                        e.CellBounds.X + e.CellBounds.Width - 1,\r\n                        e.CellBounds.Y + e.CellBounds.Height\r\n                    );\r\n                }\r\n                e.Handled = true;\r\n            }\r\n        }\r\n\r\n        private void AttachEvent()\r\n        {\r\n            DataGridView.CellPainting += (s, e) =&gt;\r\n            {\r\n                if (e.RowIndex == 0 &amp;&amp;\r\n                    e.ColumnIndex &lt; _StartDateColumn)\r\n                {\r\n                    e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;\r\n                }\r\n\r\n                if (e.RowIndex == 0 &amp;&amp; \r\n                    e.ColumnIndex &gt;= _StartDateColumn)\r\n                {\r\n                    e.AdvancedBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None;\r\n                    e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;\r\n\r\n                    if (e.ColumnIndex &lt; DataGridView.Columns.Count - 1 &amp;&amp;\r\n                        Convert.ToString(DataGridView.Rows[0].Cells[e.ColumnIndex + 1].Value) != \"\")\r\n                    {\r\n                        e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Single;\r\n                    }\r\n                }\r\n\r\n                if ((e.RowIndex == 0 || e.RowIndex == 1) &amp;&amp; \r\n                    e.ColumnIndex &gt;= _StartDateColumn)\r\n                {\r\n                    DrawMergeImage(s, e);\r\n                }\r\n\r\n                if (e.RowIndex &gt; 1 &amp;&amp;\r\n                    e.ColumnIndex &gt;= _StartDateColumn)\r\n                {\r\n                    DrawBorder(s, e);\r\n                }\r\n\r\n            };\r\n\r\n            DataGridView.Scroll += (s, e) =&gt; { DataGridView.Refresh(); };\r\n\r\n            CreateChart.Click += (s, e) =&gt; CreateDataGridView();\r\n\r\n            DataGridView.SelectionChanged += (s, e) =&gt;\r\n            {\r\n                if (DataGridView.Rows.Count &gt;= 2)\r\n                {\r\n                    DataGridView.Rows[0].Selected = false;\r\n                    DataGridView.Rows[1].Selected = false;\r\n                }\r\n            };\r\n\r\n            DataGridView.RowPrePaint += (s, e) =&gt;\r\n            {\r\n                e.PaintParts &amp;= ~DataGridViewPaintParts.Focus;\r\n            };\r\n\r\n        }\r\n\r\n        private void CreateDataGridView()\r\n        {\r\n            if (TargetYm.Text == \"\") return;\r\n\r\n            DataGridView.Rows.Clear();\r\n            DataGridView.Columns.Clear();\r\n\r\n            DateTime ym = DateTime.Parse(TargetYm.Text);\r\n            DateTime startDay = new DateTime(ym.Year, ym.Month, 21);\r\n\r\n            ym = ym.AddMonths(1);\r\n            DateTime endDay = new DateTime(ym.Year, ym.Month, 20);\r\n\r\n            List&lt;DataGridViewColumn&gt; listColumn = new List&lt;DataGridViewColumn&gt;();\r\n\r\n            foreach (var e in new string[] { \"ID\", \"\u578b\u5f0f\", \"\u5de5\u756a\", \"\u6570\u91cf\", \"\u8ffd\u756a\" })\r\n            {\r\n                listColumn.Add(new DataGridViewTextBoxColumn\r\n                {\r\n                    Name = e,\r\n                    HeaderText = \"\"\r\n                });\r\n            }\r\n\r\n            while (startDay &lt;= endDay)\r\n            {\r\n                listColumn.Add(new DataGridViewTextBoxColumn\r\n                {\r\n                    Name = startDay.ToString(\"yyyy\/MM\/dd\"),\r\n                    HeaderText = \"\",\r\n                    Width = _DateColumnWidth\r\n                });\r\n\r\n                listColumn.Add(new DataGridViewTextBoxColumn\r\n                {\r\n                    Width = _DateColumnWidth\r\n                });\r\n\r\n                listColumn.Add(new DataGridViewTextBoxColumn\r\n                {\r\n                    Width = _DateColumnWidth\r\n                });\r\n\r\n                startDay = startDay.AddDays(1);\r\n            }\r\n\r\n            DataGridView.Columns.AddRange(listColumn.ToArray());\r\n\r\n            for (int i = 0; i &lt; 2; i++) DataGridView.Rows.Add(\"\");\r\n\r\n            for (int c = 0; c &lt; listColumn.Count; c++)\r\n            {\r\n                if (c &lt; _StartDateColumn)\r\n                {\r\n                    DataGridView.Rows[0].Cells[c].Value = listColumn[c].Name;\r\n                }\r\n                else\r\n                {\r\n                    if (listColumn[c].Name != \"\")\r\n                    {\r\n                        DateTime.TryParse(listColumn[c].Name, out DateTime result);\r\n\r\n                        DataGridView.Rows[1].Cells[c].Value = result.ToString(\"dd\");\r\n\r\n                        if (c == _StartDateColumn || result.ToString(\"dd\") == \"01\")\r\n                        {\r\n                            DataGridView.Rows[0].Cells[c].Value = result.ToString(\"MM\");\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            SetupRowColumn();\r\n            DataLoad();\r\n        }\r\n\r\n        private void DataLoad()\r\n        {\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n            DataGridView.Rows.Add(\"\");\r\n        }\r\n\r\n        private void SetupRowColumn()\r\n        {\r\n            DataGridView.Columns[\"ID\"].Visible = false;\r\n\r\n            DataGridView.Rows[0].DefaultCellStyle.BackColor = Color.AliceBlue;\r\n            DataGridView.Rows[1].DefaultCellStyle.BackColor = Color.AliceBlue;\r\n\r\n            foreach (DataGridViewColumn c in DataGridView.Columns) c.SortMode = DataGridViewColumnSortMode.NotSortable;\r\n        }\r\n\r\n        private void SetupDataGridView()\r\n        {\r\n            DataGridView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;\r\n            DataGridView.RowHeadersWidth = 4;\r\n\r\n            DataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;\r\n            DataGridView.ColumnHeadersHeight = 4;\r\n            DataGridView.AllowUserToResizeColumns = false;\r\n\r\n            \/\/DataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;\r\n            DataGridView.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False;\r\n\r\n            DataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;\r\n            DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;\r\n\r\n            DataGridView.Font = new Font(\"\u30e1\u30a4\u30ea\u30aa\", 9);\r\n            DataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;\r\n\r\n            DataGridView.AllowUserToAddRows = false;\r\n            DataGridView.MultiSelect = true;\r\n\r\n            typeof(DataGridView).\r\n            GetProperty(\"DoubleBuffered\", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).\r\n            SetValue(DataGridView, true, null);\r\n        }\r\n    }\r\n\r\n    class DateClass\r\n    {\r\n        private string TargetYm;\r\n        public object \u5e74\u6708\r\n        {\r\n            set\r\n            {\r\n                try\r\n                {\r\n                    var dt = DateTime.Parse(Convert.ToString(value));\r\n                    TargetYm = dt.ToString(\"yyyy\u5e74MM\u6708\");\r\n                }\r\n                catch\r\n                {\r\n                    TargetYm = \"\";\r\n                }\r\n            }\r\n            get { return TargetYm; }\r\n        }\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u56de\u306f\u6a19\u6e96\u30d8\u30c3\u30c0\u30fc\u3092\u5229\u7528\u305b\u305a1\u884c\u76ee2\u884c\u76ee\u3092\u30d8\u30c3\u30c0\u30fc\u3068\u3057\u3066\u5229\u7528\u3057\u3066\u304a\u308a\u3001\u8a66\u3057\u306b1\u884c\u76ee\u306e1\u5217\u76ee2\u5217\u76ee\u3092\u64ec\u4f3c\u7684\u7d50\u5408\u3057\u3066\u307f\u305f\u3002 \u3069\u3053\u306e\u30b5\u30a4\u30c8\u3082\u3060\u3044\u305f\u3044\u540c\u3058\u8aac\u660e\u3092\u3057\u3066\u3044\u3066\u3001CellPainting()\u3067\u51e6\u7406\u3059\u308b\u306e\u304c\u57fa\u672c\u3068\u3044\u3046\u611f\u3058\u3002 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/appbay.org\/?p=3143\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;C# DataGridView \u30bb\u30eb\u306e\u7d50\u5408&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[9],"class_list":["post-3143","post","type-post","status-publish","format-standard","hentry","category-1","tag-c-net"],"_links":{"self":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/3143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3143"}],"version-history":[{"count":37,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/3143\/revisions"}],"predecessor-version":[{"id":6308,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/3143\/revisions\/6308"}],"wp:attachment":[{"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}