-3

I'm trying to work out Max value from the datagridview. Here is my whole code:

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 maxSpeed = Speed.Max();
            maxSpeed = maxSpeed / 10;
            string MaxSpeed = Convert.ToString(maxSpeed);
            textBox1.Text = MaxSpeed;    
        }
    }
}

}

I'm getting an error on 'int maxSpeed = Speed.Max();'

The error message says that "The name 'Speed' does not exist in a current context"

I don't know what value should I put in there to represent one of my columns. Hope someone will be able to help me with this issue. Thank You.

user2375636
  • 19
  • 1
  • 2

3 Answers3

2

Speed is not a class or an object, so it doesn't know what it is. You have to use a function and a collection:

int maxSpeed = data.Max(x => x.Speed.Value);

See the documentation on list max for more information and sample code.

Jason
  • 13,563
  • 15
  • 74
  • 125
0

You should probably use Math.Max Method (Double, Double) and Math.Min Method (Double, Double) included in standard .NET C# Library

Alexander Bell
  • 7,842
  • 3
  • 26
  • 42
0

Something like this maybe?

int minAccountLevel = int.MaxValue;
int maxAccountLevel = int.MinValue;
foreach (DataGridViewRow dr in table.Rows)
{
    int accountLevel = dr.Cells["Speed"];
    minAccountLevel = Math.Min(minAccountLevel, accountLevel);
    maxAccountLevel = Math.Max(maxAccountLevel, accountLevel);
}

Source: https://stackoverflow.com/a/2442717/1908499

Community
  • 1
  • 1
Niccolò Campolungo
  • 11,824
  • 4
  • 32
  • 39