-3

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

}

我在“int maxSpeed = Speed.Max();”上遇到错误

错误消息显示“当前上下文中不存在名称‘Speed’”

我不知道我应该放什么值来代表我的专栏之一。希望有人能够帮助我解决这个问题。谢谢你。

4

3 回答 3

2

速度不是一个类或一个对象,所以它不知道它是什么。你必须使用一个函数和一个集合:

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

有关更多信息和示例代码,请参阅 list max 上的文档。

于 2013-05-12T20:01:19.990 回答
0

您可能应该使用Math.Max Method (Double, Double)Math.Min Method (Double, Double)包含在标准 .NET C# 库中

于 2013-05-12T20:01:33.560 回答
0

可能是这样的?

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

来源:https ://stackoverflow.com/a/2442717/1908499

于 2013-05-12T20:04:59.777 回答