C# 通过图表控件C显示数据#

C# 通过图表控件C显示数据#,c#,charts,C#,Charts,我有一个从CSV文件填充的datagridview。现在我想表示表中的数据。我试过一些代码,但不起作用。我想让它在按下按钮后绘制图表 这是我的全部代码: namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } publi

我有一个从CSV文件填充的datagridview。现在我想表示表中的数据。我试过一些代码,但不起作用。我想让它在按下按钮后绘制图表

这是我的全部代码:

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public class HRData
        {
            public int? HeartRate { get; set; }
            public int? Speed { get; set; }
            public int? Power { get; set; }
            public int? Altitude { get; set; }

            public override string ToString()
            {
                return String.Format("Heart rate={0}, Speed={1}, Power={2}, Altitude={3}", HeartRate, Speed, Power, Altitude);
            }
        }   

        public static class HRDataReader
        {
            static private int? ConvertValue(string[] values, int index)
            {
                if (index >= values.Length)
                    return null;
                int value;
                if (int.TryParse(values[index], out value))
                    return value;
                return null;
            }

            static public IList<HRData> Read(string fileName)
            {
                if (string.IsNullOrEmpty(fileName))
                    throw new ArgumentNullException("fileName");

                using (StreamReader sr = new StreamReader(fileName))
                {
                    string line;

                    // First: Skip to the correct section.
                    while ((line = sr.ReadLine()) != null)
                        if (line == "[HRData]")
                            break;

                    // Now: Read the HRData
                    List<HRData> data = new List<HRData>();
                    while ((line = sr.ReadLine()) != null)
                    {
                        if (line.StartsWith("[") && line.EndsWith("]"))
                            break;
                        line = line.Trim().Replace("\t", " "); // Remove all tabs.
                        while (line.Contains("  ")) // Remove all duplicate spaces.
                        line = line.Replace("  ", " ");
                        string[] values = line.Split(' '); // Split the line up.
                        data.Add(new HRData
                        {
                            HeartRate = ConvertValue(values, 0),
                            Speed = ConvertValue(values, 1),
                            Power = ConvertValue(values, 2),
                            Altitude = ConvertValue(values, 3)
                        });
                    }
                    return data;
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                dataGridView1.Rows.Clear();
                dataGridView1.Columns.Clear();

                IList<HRData> data = HRDataReader.Read(openFileDialog1.FileName);

                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = "HeartRate", HeaderText = "Heart rate", DataPropertyName = "HeartRate" });
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = "Speed", HeaderText = "Speed", DataPropertyName = "Speed" });
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = "Power", HeaderText = "Power", DataPropertyName = "Power" });
                dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = "Altitude", HeaderText = "Altitude", DataPropertyName = "Altitude" });

                dataGridView1.DataSource = data;

                //int 
                int maxSpeed = data.Max(x => x.Speed.Value);
                maxSpeed = maxSpeed / 10;
                string MaxSpeed = Convert.ToString(maxSpeed);
                textBox1.Text = MaxSpeed;

                double aveSpeed = data.Average(x => x.Speed.Value);
                aveSpeed = aveSpeed / 10;
                aveSpeed = Math.Round(aveSpeed, 0);
                string AveSpeed = Convert.ToString(aveSpeed);
                textBox2.Text = AveSpeed;

                double aveHeart = data.Average(x => x.HeartRate.Value);
                aveHeart = Math.Round(aveHeart, 0);
                string AveHeart = Convert.ToString(aveHeart);
                textBox3.Text = AveHeart;

                int maxHeart = data.Max(x => x.HeartRate.Value);
                string MaxHeart = Convert.ToString(maxHeart);
                textBox4.Text = MaxHeart;

                int minHeart = data.Min(x => x.HeartRate.Value);
                string MinHeart = Convert.ToString(minHeart);
                textBox5.Text = MinHeart;

                double avePower = data.Average(x => x.Power.Value);
                avePower = Math.Round(avePower, 0);
                string AvePower = Convert.ToString(avePower);
                textBox6.Text = AvePower;

                int maxPower = data.Max(x => x.Power.Value);
                string MaxPower = Convert.ToString(maxPower);
                textBox7.Text = MaxPower;

                double aveAltitude = data.Average(x => x.Altitude.Value);
                aveAltitude = Math.Round(aveAltitude, 0);
                string AveAltitude = Convert.ToString(aveAltitude);
                textBox8.Text = AveAltitude;

                int maxAltitude = data.Max(x => x.Altitude.Value);
                string MaxAltitude = Convert.ToString(maxAltitude);
                textBox9.Text = MaxAltitude;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            chart1.DataSource = hRDataBindingSource;
            chart1.Series["Series1"].XValueMember = Speed;
            chart1.Series["Series1"].YValueMembers = "test";
            chart1.DataBind();
        }
    }
}
命名空间窗口窗体应用程序2
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
公共类HRData
{
公共整数?心率{get;set;}
公共整数?速度{get;set;}
公共整数?幂{get;set;}
公共整数?高度{get;set;}
公共重写字符串ToString()
{
返回String.Format(“心率={0},速度={1},功率={2},海拔={3}”,心率,速度,功率,海拔);
}
}   
公共静态类HRDataReader
{
静态私有int?ConvertValue(字符串[]值,int索引)
{
如果(索引>=values.Length)
返回null;
int值;
if(int.TryParse(值[索引],输出值))
返回值;
返回null;
}
静态公共IList读取(字符串文件名)
{
if(string.IsNullOrEmpty(文件名))
抛出新的ArgumentNullException(“文件名”);
使用(StreamReader sr=新StreamReader(文件名))
{
弦线;
//第一:跳到正确的部分。
而((line=sr.ReadLine())!=null)
如果(第行=“[HRData]”)
打破
//现在:阅读HRD数据
列表数据=新列表();
而((line=sr.ReadLine())!=null)
{
if(line.StartsWith(“[”)&&line.EndsWith(“]))
打破
line=line.Trim().Replace(“\t”,”);//删除所有选项卡。
while(line.Contains(“”)//删除所有重复的空格。
行=行。替换(“,”);
string[]values=line.Split(“”);//将行拆分。
数据。添加(新的HRData)
{
心率=转换值(值,0),
速度=转换值(值,1),
功率=转换值(值,2),
高度=转换值(值,3)
});
}
返回数据;
}
}
}
私有void Form1\u加载(对象发送方、事件参数e)
{
}
私有无效按钮1\u单击\u 1(对象发送者,事件参数e)
{
如果(openFileDialog1.ShowDialog()==DialogResult.OK)
{
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
IList data=HRDataReader.Read(openFileDialog1.FileName);
添加(新的DataGridViewTextBoxColumn{Name=“HeartRate”,HeaderText=“HeartRate”,DataPropertyName=“HeartRate”});
添加(新的DataGridViewTextBoxColumn{Name=“Speed”,HeaderText=“Speed”,DataPropertyName=“Speed”});
添加(新的DataGridViewTextBoxColumn{Name=“Power”,HeaderText=“Power”,DataPropertyName=“Power”});
添加(新的DataGridViewTextBoxColumn{Name=“Altitude”,HeaderText=“Altitude”,DataPropertyName=“Altitude”});
dataGridView1.DataSource=数据;
//int
int maxSpeed=data.Max(x=>x.Speed.Value);
maxSpeed=maxSpeed/10;
字符串MaxSpeed=Convert.ToString(MaxSpeed);
textBox1.Text=MaxSpeed;
double aveSpeed=数据平均值(x=>x.Speed.Value);
aveSpeed=aveSpeed/10;
aveSpeed=Math.Round(aveSpeed,0);
字符串AveSpeed=Convert.ToString(AveSpeed);
textBox2.Text=AveSpeed;
double avehart=数据.平均值(x=>x.HeartRate.Value);
Avehart=Math.Round(Avehart,0);
字符串avehart=Convert.ToString(avehart);
textBox3.Text=avehart;
int maxHeart=data.Max(x=>x.HeartRate.Value);
字符串MaxHeart=Convert.ToString(MaxHeart);
textBox4.Text=MaxHeart;
int minHeart=data.Min(x=>x.HeartRate.Value);
字符串MinHeart=Convert.ToString(MinHeart);
textBox5.Text=MinHeart;
double avePower=数据平均值(x=>x.Power.Value);
avePower=数学圆(avePower,0);
字符串AvePower=Convert.ToString(AvePower);
textBox6.Text=AvePower;
int maxPower=data.Max(x=>x.Power.Value);
字符串MaxPower=Convert.ToString(MaxPower);
textBox7.Text=MaxPower;
双海拔高度=数据平均值(x=>x海拔高度值);
AveAttitude=数学圆(AveAttitude,0);
字符串avealtime=Convert.ToString(avealtime);
textBox8.Text=海拔高度;
int maxAltitude=data.Max(x=>x.Altitude.Value);
字符串MaxAltitude=Convert.ToString(MaxAltitude);
textBox9.Text=最大高度;
}
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
chart1.DataSource=hRDataBindingSource;
图表1.系列[“系列1”]。XValueMember=速度;
图表1.系列[“系列1”]。YValueMembers=“测试”;
恰恰