2013-05-12 235 views
-2

我试图从datagridview中计算最大值。 这里是我的全部代码:计算最小值和最大值C#

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

}

我收到一条错误 '廉政MAXSPEED = Speed.Max();'

该错误消息说,

“名称‘速度’并没有在当前的背景下存在”我不知道我应该把什么样的价值在那里代表我的一列。希望有人能够帮助我解决这个问题。谢谢。

+3

这是一个很大的代码。你能把它修剪一下吗?它也可以帮助你自己确定问题。 – 2013-05-12 20:21:41

回答

2

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

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

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

+0

什么是FindMax? – user2375636 2013-05-12 20:05:14

+0

更新了我的答案,以便与列表一起工作。 – Jason 2013-05-12 20:14:10

+0

出现错误:“不能隐式转换类型'int?'到'int'。一个明确的转换存在(你是否缺少一个演员?) “ – user2375636 2013-05-12 20:18:11

0

你或许应该使用Math.Max Method (Double, Double)Math.Min Method (Double, Double)在标准的.NET C#库包括

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

+0

它崩溃在线“foreach(dataRow dr在dataGridView1.Rows)”与消息无法投射类型'System.Windows.Forms.DataGridViewRow'类型'System.Data.DataRow'的对象。 – user2375636 2013-05-12 20:13:40

+0

对不起,我的错。编辑! – 2013-05-12 20:24:14

相关问题