【发布时间】:2019-02-26 01:14:48
【问题描述】:
我正在开发考勤软件我面临一个问题,我想增加每个标题的日期。
在这里你可以看到我的数据网格视图: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);
}
}
【问题讨论】:
-
两个日期之间的差距有多大,年份可以变化,如 2-11-18 到 2-4-19
-
在不了解您想要完成的全部内容的情况下……按照您的描述处理这个问题似乎很“奇怪”。首先,似乎永远不会超过一 (1) 行?此外,如果一个月有三十 (30) 天,并且每天有三 (3) 列(进出总计)……那么会有一行 30x3 = “90”列?这看起来很奇怪。
-
您是否考虑过通过添加“日期”列让网格中的每个“行”代表一个“日”日期?我建议您查找一些
DateTime属性和方法……您应该找到可以将“日”添加到日期的方法,例如……dt = dt.AddDays(1);。有一些这样的方法,我相信它们在添加/减去日期时会有所帮助。请记住,DateTime对象是不可变的,因此,dt.AddDays(1)返回一个新的DateTime对象并添加日期并且不会更改dt。 -
错误没有被 dt = DT.AddDays(1) 解决;它;增加日期只是一次而不是连续请查看我的代码,如果你不介意请更正我的代码
标签: c# datagridview header datetimepicker time-and-attendance