2013-05-12 4 views
-2

Я пытаюсь выработать максимальное значение из datagridview. Вот весь мой код:Вычислить min и max 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;  
     } 
    } 
} 

}

Я получаю ошибку на 'Int MAXSPEED = Speed.Max();'

сообщение об ошибке говорит, что «Название„Скорость“не существует в текущем контексте»

Я не знаю, какое значение я должен положить туда, чтобы представить одну из моих колонок. Надеюсь, кто-то сможет мне помочь в этом вопросе. Спасибо.

+3

Это много кода. Можете ли вы немного обрезать его? Это может помочь вам идентифицировать проблему самостоятельно. –

ответ

2

Скорость не является классом или объектом, поэтому он не знает, что это такое. Вы должны использовать функцию и коллекции:

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

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

+0

Что такое FindMax? – user2375636

+0

обновил мой ответ на работу со списком. – Jason

+0

появляется с ошибкой: «Невозможно неявно преобразовать тип« int? »? to 'int'. Явное преобразование существует (вы пропускаете листинг?) « – user2375636

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

+0

Извините, моя вина. Под редакцией! –