Member 13452619 Ответов: 1

Как заставить datagridview автоматически заполнять каждую ячейку кругом при загрузке формы


Я пытаюсь создать программу, которая выглядит как светодиодный дисплей. Я использую DataGridView в форме windows с использованием C#. Моя проблема заключается в том, что я могу получить dataGridView для отображения, но он не будет автоматически заполнять круги в каждой ячейке. Ниже вы увидите метод Dgv_CellPainting, но я не знаю, как и где его реализовать. Может кто-нибудь помочь? Вот весь код до сих пор...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestDataGrid
{
    public partial class Form1 : Form
    {

        const int cColWidth = 10;
        const int cRowHeight = 10;
        const int cMaxColumn = 96;
        const int cMaxRow = 16;
        const int matrixWidth = cColWidth * cMaxColumn + 3;
        const int matrixHeight = cRowHeight * cMaxRow + 3;
        DataGridView DGV;

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            DGV = new DataGridView();
            DGV.Name = "DGV";
            DGV.AllowUserToResizeColumns = false;
            DGV.AllowUserToResizeRows = false;
            DGV.AllowUserToAddRows = false;
            DGV.RowHeadersVisible = false;
            DGV.ColumnHeadersVisible = false;
            DGV.GridColor = Color.DarkBlue;
            DGV.DefaultCellStyle.BackColor = Color.AliceBlue;
            DGV.ScrollBars = ScrollBars.None;
            DGV.Size = new Size(matrixWidth, matrixHeight);
            DGV.Location = new Point(0, 0);          
            DGV.ForeColor = Color.Transparent;                      
            
            // add 1536 cells
            for (int i = 0; i < cMaxColumn; i++)
            {
                DataGridViewImageColumn imageCell = new DataGridViewImageColumn();
               
                DGV.Columns.Add(imageCell);
                DGV.Columns[i].Name = i.ToString();
                DGV.Columns[i].Width = cColWidth;
                DGV.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            }
            for (int j = 0; j < cMaxRow; j++)
            {
                DataGridViewRow row = new DataGridViewRow();
                row.Height = cRowHeight;
                DGV.Rows.Add(row);

            }            

            Controls.Add(DGV);           

        }

        private void Dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            
              Brush Brs = new SolidBrush(Color.Blue);
              GraphicsExtensions.FillCircle(e.Graphics, Brs, e.CellBounds.Location.X + 5, e.CellBounds.Location.Y + 10, 5);           
              e.Handled = true;

         }
      }
    
    }
I also had to make a separate class for the GraphicsExtensions...here is the code...
<pre lang="c#">using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestDataGrid
{
    public static class GraphicsExtensions
    {
        
            public static void FillCircle(this Graphics g, Brush brush, float centerX, float centerY, float radius)
            {
                g.FillEllipse(brush, centerX - radius, centerY - radius, radius + radius, radius + radius);
            }
     }
}


Что я уже пробовал:

Я пытался реализовать метод Dgv_CellPainting, но я не знаю, что использовать в качестве параметров, и я также не знаю, как его назвать (я имею в виду, нужно ли мне делать что-то вроде DGV.Dgv_CellPainting (),) я надеюсь, что это имеет смысл.

1 Ответов

Рейтинг:
0

RickZeeland

Я думаю, что datagridview это не самый лучший выбор, вот статья, которая показывает, как сделать пользовательский элемент управления: Светодиодный матричный дисплей C# [^]


Karthik_Mahalingam

5