2017-01-16 3 views
-1

cの条件どおりのDataGridViewに変換されていません。値がすべてのセルの最高値であれば、cell.value = "H" restは中程度でなければなりません。これは私がこれまでにやっていることです:値は、私はcell.valueは、セルが低い「L」を、含まなければならないすべての値の最小値である場合、条件に応じてDataGridViewの列の値を変更したい#

//Function to display interaction as High, Medium and Low 
    public void ShowInteraction(DataGridView dv, string columnName) 
    { 
     //MAX 
     var Max = dv.Rows.Cast<DataGridViewRow>() 
        .Max(r => Convert.ToDouble(r.Cells[columnName].Value)); 





     //MIN 
     List<double> arr = new List<double>(); 

     foreach (DataGridViewRow row in dv.Rows) 
     { 

      if (row != null && row.Cells[columnName].Value != null) 
      { 

       arr.Add(Convert.ToDouble(row.Cells[columnName].Value.ToString())); 
      } 
     } 

     double Min = arr.Min(); 

     //show interaction in datagridview as H, M nad L 
     foreach (DataGridViewRow row in dv.Rows) 
     { 
      if (row.Cells[columnName].Value != null) 
      { 
       if ((double)row.Cells[columnName].Value == Min) 
       { 
        row.Cells[columnName].Value = Convert.ToString("L"); 

       } 
       else if ((double)row.Cells[columnName].Value == Max) 
       { 
        row.Cells[columnName].Value = Convert.ToString("H"); 
       } 
       else if ((double)row.Cells[columnName].Value < Max && (double)row.Cells[columnName].Value > Min) 
       { 
        row.Cells[columnName].Value = Convert.ToString("M"); 
       } 
       else if ((double)row.Cells[columnName].Value == 0.0000) 
       { 
        row.Cells[columnName].Value = Convert.ToString("N"); 
       } 

       else 
       { 
        row.Cells[columnName].Value = Convert.ToString("L"); 
       } 


      } 
     } 
    } 

そして、この結果:

enter image description here

私の問題のある媒体と高い値を示しているが、いくつかの回は、それが最も低い値をエスケープしていることと、一部の列に「L」を表示しないでください。生成されるデータはランダムなデータです。

+0

他の列にはLがあります。たぶんあなたは一番下にスクロールしなかったでしょう。 – LarsTech

答えて

1

私は少しあなたのコードをクリーンアップし、私はあなたがされているエラーが表示されません。これが問題の解決に役立つかどうかを教えてください。

public partial class MainForm : Form { 

    public MainForm() { 
     InitializeComponent(); 
     DataGridView dgv = new DataGridView(); 
     dgv.Columns.Add("columnName", "columnName"); 
     dgv.AllowUserToAddRows = false; 

     dgv.Rows.Add(21.0); 
     dgv.Rows.Add(15.0); 
     dgv.Rows.Add(20.0); 
     dgv.Rows.Add(25.0); 
     dgv.Rows.Add(30.12354122); 

     this.Controls.Add(dgv); 

     ShowInteraction(dgv, "columnName"); 
    } 

    public void ShowInteraction(DataGridView dv, string columnName) { 
     List<double> values = dv.Rows.Cast<DataGridViewRow>().Select(row => Convert.ToDouble(row.Cells[columnName].Value)).ToList(); 
     double Max = values.Max(); 
     double Min = values.Min(); 

     foreach (DataGridViewRow row in dv.Rows) 
     { 
      if (row.Cells[columnName].Value != null) 
      { 
       double cellValue = Convert.ToDouble(row.Cells[columnName].Value); 
       var cell = row.Cells[columnName]; 
       if (cellValue == Min) 
       { 
        cell.Value = "L"; 
       } 
       else if (cellValue == Max) 
       { 
        cell.Value = "H"; 
       } 
       else if (cellValue < Max && cellValue > Min) 
       { 
        cell.Value = "M"; 
       } 
       else if (cellValue == 0) 
       { 
        cell.Value = "N"; 
       } 
       else 
       { 
        cell.Value = "L"; 
       } 
      } 
     } 
    } 
} 
+0

ありがとうございました。 。しかし、今では "L"が全く表示されていません。なぜかそれはどうですか? – sarim

+0

どこかで私が使用できるデータの例を投稿できますか? –

+0

おかげさまであなたのソリューションは私を導いてくれました。私は正しい答えを得ました。 。 – sarim

関連する問題