2017-01-16 60 views
-1

如果cell.value是單元格必須包含的所有值的最小值,即低,我希望根據條件更改datagridview列的值。如果所有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's。也許你沒有滾動到底部。 – 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