2017-01-16 4 views
-1

Я хочу изменить значение столбца datagridview в соответствии с условием, если значение cell.value является минимальным из всех значений, которое ячейка должна содержать «L», что является низким. Если значение самое высокое из всех значений cell.value = "H" должно быть средним. Это то, что я сделал до сих пор:значения не преобразуются в datagridview в соответствии с условием C#

//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

Смежные вопросы