2014-04-18 3 views
1

나는 우리가 내 SQL 데이터베이스에서 피벗 테이블을 얻고있다. 그 셀 값에 따라 gridview 셀에 다른 색을 줄 필요가있다.이 요구 사항에 대한 C# 코드를 도와주세요.셀 값을 기준으로 gridview 셀 색상을 변경하는 방법은 무엇입니까?

----------------------------------------------- 
Alternative Goal 1 Goal 2 Goal 3 Goal 4 
----------------------------------------------- 
A   0.86 0.5  1 0.5  
B   0.87 0 0.9  0.6  
---------------------------------------------- 

이제 컬러는 여전히 관련이 있지만, 나는 이런 식으로 할 것인지 등의 아래

Value     Colour Code 
---------------------------------- 
1.00     33B739 
0.75 to 0.99   50EB19 
0.50 to 0.74   54EA58 
0.25 to 0.49   93FB85 
0.05 to 0.24   E0FCE0 
0.00     FFFFFF 
-0.24 to -0.05   FFD5D5 
-0.49 to -0.25   FFA3A3 
-0.74 to -0.50   FF6161 
-0.99 to -0.75   FF3333 
-1.00     FF0000 
--------------------------------- 
+0

#temp 테이블에 저장하고 절 또는>/<연산자를 사용하여 값을 검색하십시오. 귀하의 회신에 대해서는 – Shell

답변

0

확실하지 될 것 값에 따라 :

public partial class Form1 : Form { 

    public Form1() { 
     InitializeComponent(); 

     List<ColorMap> colorMaps = new List<ColorMap>() 
     { 
      new ColorMap(-999, -1, "FF0000"), 
      new ColorMap(-0.99, -0.75, "FF3333") 
      /* and so on*/ 
     }; 

     foreach (DataGridViewRow row in dataGridView1.Rows) { 
      foreach (DataGridViewCell cell in row.Cells) { 
       double cellValue; 
       if (!double.TryParse(cell.Value.ToString(), out cellValue)) { 
        continue;//or whatever logic you want 
       } 
       ColorMap colorMap = colorMaps.SingleOrDefault(x => x.From <= cellValue && x.To >= cellValue); 
       if (colorMap == null) { 
        continue;//or whatever logic you want 
       } 

       ColorCode colorCode = new ColorCode(colorMap.Value); 
       cell.Style.BackColor = Color.FromArgb(colorCode.Red, colorCode.Green, colorCode.Blue); 
      } 
     } 
    } 
} 

public class ColorMap { 
    public double From { get; private set; }//lowest border 
    public double To { get; private set; }//highest border 
    public string Value { get; private set; }//color code 

    public ColorMap(double from, double to, string value) { 
     this.From = @from; 
     this.To = to; 
     this.Value = value; 
    } 
} 

public class ColorCode { 
    public string Color { get; private set; } 

    public ColorCode(string code) { 
     this.Color = code; 
    } 

    public int Red { get { return ConvertToInt(0, 1); } } 
    public int Green { get { return ConvertToInt(2, 3); } } 
    public int Blue { get { return ConvertToInt(4, 5); } } 

    private int ConvertToInt(int index1, int index2) { 
     if (Color == null || Color.Length != 6) { 
      return 0;//or whatever logic you want 
     } 
     string hexValue = string.Format("{0}{1}", Color[index1], Color[index2]); 
     int result; 
     try { 
      result = int.Parse(hexValue, NumberStyles.HexNumber); 
     } catch { 
      return 0; 
     } 
     return result; 
    } 
} 

나는 당신의 데이터베이스 테이블을 희망 가장 낮은 값과 가장 높은 값에 대해 별도의 필드가 있습니다. 읽기 쉽기 때문입니다.

+0

thx이지만이 색상 값은 조건에서만 사용하겠습니다. 이 최대 값과 최소값은 db에 언급되어 있지 않습니다. – vim

관련 문제