-3

データグリッドビューから最大値を計算しようとしています。ここに私のコード全体があります:

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;    
        }
    }
}

}

「int maxSpeed = Speed.Max();」でエラーが発生します。

エラー メッセージには、「名前 'Speed' は現在のコンテキストには存在しません」と表示されます。

列の 1 つを表すために、そこにどの値を入力すればよいかわかりません。誰かがこの問題で私を助けてくれることを願っています。ありがとうございました。

4

3 に答える 3

2

速度はクラスでもオブジェクトでもないため、それが何であるかはわかりません。関数とコレクションを使用する必要があります。

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

詳細とサンプル コードについては、list max のドキュメントを参照してください。

于 2013-05-12T20:01:19.990 に答える
0

おそらく、標準の .NET C# ライブラリを使用Math.Max Method (Double, Double)して含める必要があります。Math.Min Method (Double, Double)

于 2013-05-12T20:01:33.560 に答える