今天在做工资统计GDI模块的时候,发现如果有一个月份没有数据,就会报错。
所以就改了下代码,加了Try-Catch抛出异常。
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
if (dataGridView1.Rows.Count <2)
{
high2 = 0;
Pen bluePen2 = new Pen(Color.GreenYellow, high2);
dc.DrawLine(bluePen2, 360, 439 - (high2 / 2), 400, 439 - (high2 / 2));
dc.DrawString("无记录", 宋体, whiteBrush, 107, 425 - high2);
}
else
{
string textrecoerd2 = Convert.ToString(dataGridView1.Rows[1].Cells[1].Value);
high2 = (Convert.ToSingle(dataGridView1.Rows[1].Cells[1].Value) / 20);
Pen bluePen2 = new Pen(Color.RoyalBlue, high2);
dc.DrawLine(bluePen2, 110, 439 - (high2 / 2), 150, 439 - (high2 / 2));
dc.DrawString(textrecoerd2, 宋体, whiteBrush, 107, 425 - high2);
}
try
{
string textrecoerd9 = Convert.ToString(dataGridView1.Rows[8].Cells[1].Value);
high9 = (Convert.ToSingle(dataGridView1.Rows[8].Cells[1].Value) / 20);
Pen bluePen9 = new Pen(Color.GreenYellow, high9);
dc.DrawLine(bluePen9, 460, 439 - (high9 / 2), 500, 439 - (high9 / 2));
dc.DrawString(textrecoerd9, 宋体, whiteBrush, 457, 425 - high9);
}
catch
{
dc.DrawString("无记录", 宋体, whiteBrush, 457, 425 - high9);
}
if (dataGridView1.Rows.Count <2)
{
high2 = 0;
Pen bluePen2 = new Pen(Color.GreenYellow, high2);
dc.DrawLine(bluePen2, 360, 439 - (high2 / 2), 400, 439 - (high2 / 2));
dc.DrawString("无记录", 宋体, whiteBrush, 107, 425 - high2);
}
else
{
string textrecoerd2 = Convert.ToString(dataGridView1.Rows[1].Cells[1].Value);
high2 = (Convert.ToSingle(dataGridView1.Rows[1].Cells[1].Value) / 20);
Pen bluePen2 = new Pen(Color.RoyalBlue, high2);
dc.DrawLine(bluePen2, 110, 439 - (high2 / 2), 150, 439 - (high2 / 2));
dc.DrawString(textrecoerd2, 宋体, whiteBrush, 107, 425 - high2);
}
try
{
string textrecoerd9 = Convert.ToString(dataGridView1.Rows[8].Cells[1].Value);
high9 = (Convert.ToSingle(dataGridView1.Rows[8].Cells[1].Value) / 20);
Pen bluePen9 = new Pen(Color.GreenYellow, high9);
dc.DrawLine(bluePen9, 460, 439 - (high9 / 2), 500, 439 - (high9 / 2));
dc.DrawString(textrecoerd9, 宋体, whiteBrush, 457, 425 - high9);
}
catch
{
dc.DrawString("无记录", 宋体, whiteBrush, 457, 425 - high9);
}
以上2种写法都不好,郁闷。发现这样的代码有局限性,因为DataGridView的最后一行是多出来的一行,也就是说,8-12月份没记录,8月份不会绘制出“无记录”的字,而是一条1像素的线,本来想在Form_Load里添加一条删除最后一行的代码,不过不能删除。
后来终于想到了,在前面加上判断,要绘制的GDI对象,是不是最后一行就可以了,代码如下
if (dataGridView1.Rows[7] == dataGridView1.Rows[dataGridView1.Rows.Count - 1])
{
dc.DrawString("无记录", 宋体, whiteBrush, 407, 425 - high8);
}
else
{
.....
}
0 评论:
发表评论