Merge column in Datagridview C#

Luc Hoang 0 Reputation points
2023-03-30T03:05:19.21+00:00

This code loads the meeting room with the start and end time and the background for the meeting time is teal. but not merged yet from the start time to the end time into a single cell. hope everyone can help me thank you very much. this code here not merge cell, it's disjointed

merge


private void selectAreaColor()
        {
           
            //get the BookingDetail data from api for compare with value in datagridview: Idroom, starttime,stoptime, datebook and load area color to datagridview
            QueryRQ query = CreateQuery();
            BookingIndexRS result = apiBooking.getBooking(query).Result;
            foreach (BookingDetail r in result.Data)
            {

                string idLocal = r.Id.ToString();

                string idroom = r.RoomId.ToString();
               
                string roomName = r.RoomName.ToString();

                string start = r.Start.ToString();
               
                string stop = r.Stop.ToString();
              
                string content = r.Content.ToString();

                string datestring = r.Date.ToString();
                string format = "yyyy-MM-ddTHH:mm:ssZ";
                DateTime datebook = DateTime.ParseExact(datestring, format, CultureInfo.InvariantCulture);
               
                // Get the start time and end time inputs and the selected meeting room
                DateTime startTime = DateTime.ParseExact(start, "HH:mm", null);
                DateTime stopTime = DateTime.ParseExact(stop, "HH:mm", null);

                if (datebook.Date == dateNgay.Value.Date)
                {
                    // Loop through the rows in datagridview and find the matching row
                    foreach (DataGridViewRow row in grdRoom.Rows)
                    {
                        if (row.Cells["Id"].Value.ToString() == idroom)
                        {
                            int rowIndex = row.Index;
                            //just browse through these headers list here for compare starttime, stoptime
                            List<string> excluHeadertext = new List<string>() { "08:00","08:30", "09:00", "09:30", "10:00", "10:30", "11:00", "11:30","12:00","12:30",
                             "13:00","13:30","14:00","14:30","15:00","15:30","16:00","16:30","17:00","17:30","18:00"};
                            // Loop through the columns and compare the start and end times with the time slots

                            for (int i = 1; i < grdRoom.Columns.Count; i++)
                            {

                                if (excluHeadertext.Contains(grdRoom.Columns[i].HeaderText))
                                {
                                    DateTime columnTime = DateTime.ParseExact(grdRoom.Columns[i].HeaderText, "HH:mm", CultureInfo.InvariantCulture);
                                    string _HeaderText = grdRoom.Columns[i].Name.ToString();
                                    if (startTime == columnTime)
                                    {
                                        grdRoom.Rows[rowIndex].Cells[_HeaderText].Style.BackColor = Color.Teal;

                                        // Loop through the remaining columns until we reach the stop time column
                                        while (startTime < stopTime)
                                        {
                                            startTime = startTime.AddMinutes(30);
                                            foreach (DataGridViewColumn col in grdRoom.Columns)
                                            {
                                                if (col.HeaderText == startTime.ToString("HH:mm"))
                                                {
                                                    // Set the cell spans for the merged cells
                                                    int startColumnIndex = grdRoom.Columns[_HeaderText].Index;
                                                    int endColumnIndex = col.Index;
                                                    int span = endColumnIndex - startColumnIndex + 1;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.BackColor = Color.Teal;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.SelectionBackColor = Color.Teal;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.SelectionForeColor = Color.White;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.Font = new Font(grdRoom.DefaultCellStyle.Font, FontStyle.Bold);
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.Padding = new Padding(0, 0, 0, 0);
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.WrapMode = DataGridViewTriState.True;
                                                    // grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.SelectionClipBounds = true;//error not run: SelectionClipBounds

                                                    // grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.SelectionChanged += new EventHandler(grdRoom_SelectionChanged);//error not run: SelectionChanged
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Value = content;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Tag = idLocal;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Selected = true;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].ToolTipText = content + Environment.NewLine + startTime.ToString("HH:mm") + " - " + stopTime.ToString("HH:mm");
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.ForeColor = Color.White;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.BackColor = Color.Teal;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.SelectionBackColor = Color.Teal;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.SelectionForeColor = Color.White;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.Font = new Font(grdRoom.DefaultCellStyle.Font, FontStyle.Bold);
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.Padding = new Padding(0, 0, 0, 0);
                                                    grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.WrapMode = DataGridViewTriState.True;
                                                    //grdRoom.Rows[rowIndex].Cells[startColumnIndex].Style.SelectionClipBounds = true;//error not run: SelectionClipBounds
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }

                            }


                        }
                    }
                }
            }


        }
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,390 questions
{count} votes