public static GameObject CreateCell()
        {
            GameObject    cellObject = new GameObject("Cell");
            Button        cellButton = cellObject.AddComponent <Button>();
            RectTransform cellRT     = cellObject.AddComponent <RectTransform>();

            cellRT.sizeDelta = new Vector2(100f, 50f);
            cellObject.AddComponent <Image>();

            DataGridViewCellUI cell       = cellObject.AddComponent <DataGridViewCellUI>();
            GameObject         textObject = new GameObject("Text");

            Text text = textObject.AddComponent <Text>();

            text.font      = Resources.Load <Font>("Fonts/PT Astra Sans/PT-Astra-Sans_Regular");
            text.color     = Color.white;
            text.alignment = TextAnchor.MiddleCenter;
            text.text      = "HeaderElement";

            RectTransform textRT = textObject.GetComponent <RectTransform>();

            textRT.SetParent(cellRT);
            textRT.anchorMin = Vector2.zero;
            textRT.anchorMax = Vector2.one;
            textRT.offsetMin = Vector2.zero;
            textRT.offsetMax = Vector2.zero;

            cell.textComponent   = text;
            cell.buttonComponent = cellButton;

            return(cellObject);
        }
        public void PaintRow(DataGridViewRowUI selectedRow)
        {
            DataGridViewCellUI cellUI = selectedRow.cells[0];

            if (cellUI != null)
            {
                Image cellImage = cellUI.GetComponent <Image>();
                color = cellImage.color;

                selectedRow.cells.ForEach(c => c.GetComponent <Image>().color = selectedColor);
                rowSelectionChanged.Invoke(selectedRow);
            }
        }
        public void OnChange()
        {
            if (rows.Count > 0)
            {
                if (rows?[0].cells.Count == columns?.Count)
                {
                    if (uiRows.Count > 0)
                    {
                        ClearRows();
                    }

                    for (int i = 0; i < rows.Count; i++)
                    {
                        DataGridViewRow   row       = rows[i];
                        GameObject        rowObject = DataGridViewRowUI.CreateRow();
                        DataGridViewRowUI rowUI     = rowObject.GetComponent <DataGridViewRowUI>();

                        for (int j = 0; j < row.cells.Count; j++)
                        {
                            GameObject cell = DataGridViewCellUI.CreateCell();

                            Image cellImage = cell.GetComponent <Image>();
                            if (colorRows)
                            {
                                cellImage       = cell.GetComponent <Image>();
                                cellImage.color = i == 0 || i % 2 == 0 ? even : odd;
                            }
                            else
                            {
                                cellImage.color = even;
                            }

                            RectTransform cellRT   = cell.GetComponent <RectTransform>();
                            RectTransform headerRT = columns[j].GetComponent <RectTransform>();
                            cellRT.sizeDelta = new Vector2(headerRT.sizeDelta.x, cellRT.sizeDelta.y);

                            cell.transform.SetParent(rowUI.transform);
                            DataGridViewCellUI cellUI = cell.GetComponent <DataGridViewCellUI>();

                            if (tableFont)
                            {
                                cellUI.textComponent.font = tableFont;
                            }

                            cellUI.textComponent.color = cellTextColor;
                            cellUI.textComponent.text  = row.cells[j].value;

                            Button cellButton          = cell.GetComponent <Button>();
                            DataGridViewEventArgs args = new DataGridViewEventArgs(i, j);
                            cellButton.onClick.AddListener(OnClick);

                            rowUI.cells.Add(cellUI);

                            void OnClick()
                            {
                                cellClicked.Invoke(args);
                                cellDoubleClicked.Invoke(args);
                            }
                        }


                        uiRows.Add(rowUI);
                    }

                    uiRows.ForEach(r =>
                    {
                        r.transform.SetParent(rowsComponent.transform);
                        RectTransform rowRT      = r.GetComponent <RectTransform>();
                        rowRT.anchoredPosition3D = Vector3.zero;
                        rowRT.localScale         = Vector3.one;
                        rowRT.localRotation      = Quaternion.Euler(Vector3.zero);
                    });
                }
                else
                {
                    throw new System.Exception("Cells count don't match with header!");
                }
            }
        }