Member 9983063 Ответов: 1

Я хочу увеличить дату в моем заголовке datagridview


Я работаю над программным обеспечением посещаемости я сталкиваюсь с проблемой которая заключается в том что я хочу увеличить дату на каждом заголовке здесь вы можете мой datagridview https://imgur.com/a/hP0Yedo[^]

На самом деле, я хочу показать посещаемость всего месяца, и я хочу получить даты и дни от datetimepicker пожалуйста, ребята, помогите мне дать мне решение или скажите мне, как я могу это сделать, пожалуйста, Спасибо вот мой код

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

int nnnnn2 = 0;
        private void dataGridView4_Paint(object sender, PaintEventArgs e)
        {
            nnnnn2 = DateTime.DaysInMonth(dateTimePicker1.Value.Year, dateTimePicker1.Value.Month);
            string[] weeks = new string[nnnnn2];
            string[] date = new string[nnnnn2];
            for (int i = 0; i < nnnnn2;i++)
            {
                newvar = dateTimePicker2.Text;
                //newvar = (newvar.ToString().Substring(0, newvar.ToString().Length - 11));
                DateTime dt = DateTime.Parse(newvar);
                weeks[i] = dt.DayOfWeek.ToString();
                date[i] = newvar;
            }
            for (int j = 0; j < (weeks.Count()); j += 3)
            {
                Rectangle r1 = this.dataGridView4.GetCellDisplayRectangle(j, -1, true);
                int w2 = this.dataGridView4.GetCellDisplayRectangle(j + 1, -1, true).Width;
                r1.X += 1;
                r1.Y += 1;
                r1.Width = r1.Width * 3 - 2;
                r1.Height = r1.Height / 2 - 2;
                e.Graphics.FillRectangle(new SolidBrush(this.dataGridView4.ColumnHeadersDefaultCellStyle.BackColor), r1);
                StringFormat format = new StringFormat();
                format.Alignment = StringAlignment.Center;
                format.LineAlignment = StringAlignment.Center;
                e.Graphics.DrawString(date[j / 3] + "\n" + weeks[j / 3],
                this.dataGridView4.ColumnHeadersDefaultCellStyle.Font,
                new SolidBrush(this.dataGridView4.ColumnHeadersDefaultCellStyle.ForeColor),
                r1,
                    format);
            }
        }

1 Ответов

Рейтинг:
1

Maciej Los

Я бы посоветовал использовать объект DataTable[^ объект как Источник данных[^] от dataGridView4, потому что этот компонент позволяет вам легко управлять данными:

DataTable dt = new DataTable();
//get initial date from DateTimePicker
//i'm using hard-coded date, because i'm lazy to create graphical interface
DateTime startdate = new DateTime(2019,1,1);
DateTime enddate = startdate.AddMonths(1).AddDays(-1);
TimeSpan ts = (TimeSpan)(enddate-startdate);
int dayscount = (int)ts.TotalDays;
CultureInfo ci = new CultureInfo("en-US");
for(int i=0; i<dayscount; i++)
{
	dt.Columns.Add(new DataColumn(startdate.AddDays(i).ToString("yyyy-MM-dd"), typeof(string)));
}
//check:
//dt.Columns.Cast<DataColumn>().Select(c=>c.ColumnName).Dump();

//now - use your logic to add data
//
//...
//
//finally - bind data with datatable
dataGridView4.AutoGenerateColumns = true;
dataGridView4.DataSource = dt;


Используя приведенный выше код, вы получите такие столбцы:
2019-01-01    2019-01-02    ...    2019-01-30    2019-01-31 


Для получения более подробной информации, пожалуйста, смотрите:
Как привязать данные к элементу управления Windows Forms DataGridView | Microsoft Docs[^]
Объект.Метод ToString (System) | Microsoft Docs[^]