2016-03-21 8 views
1

基本的には、特定の値に応じてGridviewの行の色を変更する必要があります。ここで私が持っているものです。c#と同じsqlの "値IN( 'a'、 'b'、 'c')"

if ((String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "A" || (String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "B" || (String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "C") 
{ 
    e.Row.BackColor = Color.Yellow; 
} 

代わりに使用するので、私はより明確にするために探しています(または、私は立派言うべき)私たちは、SQLに持っているものと同様の方法を、||オペレータ:

if(new[] {"A", "B", "C"} 
     .Contains((String)DataBinder.Eval(e.Row.DataItem, "STATUS"))) 

あなたはケースを無視する場合::のような

IF STATUS in('A','B','C') 

答えて

4

使用LINQ Contains

if (new[] {"A", "B", "C"} 
    .Contains((String) DataBinder.Eval(e.Row.DataItem, "STATUS"), 
     StringComparer.InvariantCultureIgnoreCase)) 
{ 

} 
+0

まさに私が探していたものです。そのLINQのものでそれに入る! –

+1

私は、各セルのアレイを構築するのは良い考えではないと思います – gabba

1

をあなたは、このタスクに設定使用しようとすることができ、 は静的にそれを構築します実行時に変更されない場合は 、動的に構築する場合は

var statuses = new HashSet<string> 
{ 
    "A", 
    "B", 
    "C" 
} 

と、次のように確認してください:あなたの目標を達成するために

statuses.Contains((String)DataBinder.Eval(e.Row.DataItem, "STATUS")) 
0

一つの方法は、項目の一時的なListを作成して、条件付きでListContains方法を使用することです:

var yellowStatuses = new List<string> { "A", "B", "C" }; 
var currentStatus = (String)DataBinder.Eval(e.Row.DataItem, "STATUS"); 
if (yellowStatuses.Contains(currentStatus)) 
    e.Row.BackColor = Color.Yellow; 

編集:@ハビブは答えに私を打ち負かし、クリーナーすぎるも。 :)

0

これはこれに近づく最適な方法ではありませんが、私はこのlinqクエリがあなたを助けることができると思います。

if ((new string[] {"A","B","C"}).Any(x=>x==(String)DataBinder.Eval(e.Row.DataItem, "STATUS"))) 
0

これには辞書アプローチを使用できます。いいところは、そのロジックを集中化して1か所に置くことができるどこかでそれを維持することです。

var colorStatus = new Dictionary<string,Color>(); 
colorStatus["A"] = Color.Yellow; 
colorStatus["B"] = Color.Yellow; 
colorStatus["C"] = Color.Yellow; 

これで、この辞書をテストして割り当てることができます。

string status = (String)DataBinder.Eval(e.Row.DataItem, "STATUS"); 
if(colorStatus.ContainsKey(status)) 
{ 
    e.Row.BackColor = colorStatus[status]; 
} 
関連する問題