protected override void OnTopDataIndexChanged(int newIndex)
        {
            try {
                base.OnTopDataIndexChanged(newIndex);

                for (int i = 0; i < rowCount; ++i)
                {
                    if (topDataIndex + i < dataCount)
                    {
                        for (int k = 0; k < data[topDataIndex + i].Count; ++k)
                        {
                            GameDataCell dataCell = dataRows[i][k];
                            dataCell.Initialize(data[topDataIndex + i][k]);
                            if (!dataCell.gameObject.activeSelf)
                            {
                                dataCell.gameObject.SetActive(true);
                            }
                        }
                    }
                    else
                    {
                        foreach (GameObject dataCell in rowObjects[i])
                        {
                            dataCell.SetActive(false);
                        }
                    }
                }
            }
            catch (Exception e) {
                Debug.LogException(e);
            }
        }
        //Cell data output happens here, when a  row is added
        protected override void OnRowAdded(List <GameObject> row, int rowIndex)
        {
            base.OnRowAdded(row, rowIndex);

            List <GameDataCell> dataRow = new List <GameDataCell>();

            for (int i = 0; i < row.Count; ++i)
            {
                GameDataCell cell = row[i].GetComponent <GameDataCell>();
                dataRow.Add(cell);

                //Fill row with data if we have data for this data index
                if (topDataIndex + rowIndex < dataCount)
                {
                    cell.Initialize(data[topDataIndex + rowIndex][i]);
                    if (!cell.gameObject.activeSelf)
                    {
                        cell.gameObject.SetActive(true);
                    }
                }
                else
                {
                    cell.gameObject.SetActive(false);
                }
            }

            dataRows.Add(dataRow);
        }