C# CHART图像鼠标移到点上有时候正常有时候出现索引超出范围

hello_dzm 2018-11-08 11:28:36
代码如下:
private void CHART_HisData_GetToolTipText(object sender, ToolTipEventArgs e)
{
if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
{
var InWaterInfo = new List<string>();//创建了一个空列表

int i = e.HitTestResult.PointIndex;
DataPoint dp = e.HitTestResult.Series.Points[i];
DateTime dt = DateTime.FromOADate(dp.XValue);//将double的xvalue转换为datetime形式

//连接数据库
MySqlConnection conn = new MySqlConnection(" "); //我把括号里面的删了,这个没问题
//创建数据库对象
using (MySqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT uploadTime,nowTime,inflowPressure,floodPressure,floodOpenValue,flowSet,flowRate,flowVolume,drainOpenValue FROM history where nowTime=' " + dt + " '"; //按照鼠标移到点上的横坐标和我的nowTime对应查询数据
//cmd.CommandText = "SELECT Id,uploadTime,inflowPressure,floodPressure,floodOpenValue,flowSet,flowRate,flowVolume,drainOpenValue FROM history where Id = 10288";
using (MySqlDataReader read = cmd.ExecuteReader())
{

while (read.Read())//读取每行数据
{
//获取字段信息
string inflowpressure = read.GetString("inflowPressure");
string floodpressure = read.GetString("floodPressure");
string floodopenvalue = read.GetString("floodOpenValue");
string flowset = read.GetString("flowSet");
string flowrate = read.GetString("flowRate");
string flowvolume = read.GetString("flowVolume");
string drainopenvalue = read.GetString("drainOpenValue");
InWaterInfo.Add(inflowpressure);
InWaterInfo.Add(floodpressure);
InWaterInfo.Add(floodopenvalue); //
InWaterInfo.Add(flowset); //
InWaterInfo.Add(flowrate); //
InWaterInfo.Add(flowvolume); //
InWaterInfo.Add(drainopenvalue);
}
}
}
//e.Text = string.Format("时间:{0};数值:{1:F2} ", dt, dp.YValues[0]);
e.Text = string.Format("时间:{0}\n数值:{1:F2}\n来水压力{2}\n注水压力{3}\n设定流量{4}\n瞬时流量{5}\n累计流量{6}\n注水开度{7}", dt, dp.YValues[0], InWaterInfo[0], InWaterInfo[1], InWaterInfo[2], InWaterInfo[3], InWaterInfo[4], InWaterInfo[5]);
//分别显示x轴和y轴的数值,其中{1:F2},表示显示的是float类型,精确到小数点后2位。
}
}





但当我用鼠标滑过那条红色线的时候就出现第二幅图的情况.
...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello_dzm 2018-11-13
  • 打赏
  • 举报
回复
private void CHART_HisData_GetToolTipText(object sender, ToolTipEventArgs e)
{
if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
{
var InWaterInfo = new List<string>();//创建了一个空列表

int i = e.HitTestResult.PointIndex;
DataPoint dp = e.HitTestResult.Series.Points[i];
DateTime dt = DateTime.FromOADate(dp.XValue);//将double的xvalue转换为datetime形式

//连接数据库
MySqlConnection conn = new MySqlConnection(" "); //我把括号里面的删了,这个没问题
//创建数据库对象
using (MySqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT uploadTime,nowTime,inflowPressure,floodPressure,floodOpenValue,flowSet,flowRate,flowVolume,drainOpenValue FROM history where nowTime=' " + dt + " '"; //按照鼠标移到点上的横坐标和我的nowTime对应查询数据
//cmd.CommandText = "SELECT Id,uploadTime,inflowPressure,floodPressure,floodOpenValue,flowSet,flowRate,flowVolume,drainOpenValue FROM history where Id = 10288";
using (MySqlDataReader read = cmd.ExecuteReader())
{

while (read.Read())//读取每行数据
{
//获取字段信息
string inflowpressure = read.GetString("inflowPressure");
string floodpressure = read.GetString("floodPressure");
string floodopenvalue = read.GetString("floodOpenValue");
string flowset = read.GetString("flowSet");
string flowrate = read.GetString("flowRate");
string flowvolume = read.GetString("flowVolume");
string drainopenvalue = read.GetString("drainOpenValue");
InWaterInfo.Add(inflowpressure);
InWaterInfo.Add(floodpressure);
InWaterInfo.Add(floodopenvalue);
InWaterInfo.Add(flowset); //
InWaterInfo.Add(flowrate); //
InWaterInfo.Add(flowvolume); //
InWaterInfo.Add(drainopenvalue);
e.Text = string.Format("时间:{0}\n数值:{1:F2}\n来水压力{2}\n注水压力{3}\n设定流量{4}\n瞬时流量{5}\n累计流量{6}\n注水开度{7}", dt, dp.YValues[0], InWaterInfo[0], InWaterInfo[1], InWaterInfo[2], InWaterInfo[3], InWaterInfo[4], InWaterInfo[5]);
}
}
}
//e.Text = string.Format("时间:{0};数值:{1:F2} ", dt, dp.YValues[0]);

//分别显示x轴和y轴的数值,其中{1:F2},表示显示的是float类型,精确到小数点后2位。
}
}
这样既没问题了.
iiihavedone 2018-11-09
  • 打赏
  • 举报
回复
断点调试一下看看变量
stherix 2018-11-09
  • 打赏
  • 举报
回复
应该是 e.HitTestResult.Series.Points[i]; 这句出错 i可能越界了,先判断e.HitTestResult.Series.Points的大小再往下面走吧
123321... 2018-11-09
  • 打赏
  • 举报
回复
应该有某个值没有取到,楼主调试看看

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧