2016-10-19 3 views
1

私は列の値を結合するために、次のコードを書かれている「lblJurisdiction」(true)を動作していないLINQのコードグリッドビューにチェックボックスがチェックされているすべてのローの適切

if (grdView.Rows.Count > 0) 
{ 
    foreach (GridViewRow row in grdView.Rows) 
    { 
     CheckBox chkbox = row.FindControl("chkbox") as CheckBox; 
     Label lblJurisdiction = row.FindControl("lblJurisdiction") as Label; 
     bool saveThis = chkbox.Checked; 
     if (saveThis == true) 
     { 
      List<String> Items = new List<String>(); 
      Items.Add(lblJurisdiction.Text); 
      Items.Sort(); 
      List<string> Unique = Items.Distinct().ToList(); 
      string ReplacedJurisdiction = string.Join(",", Unique.ToArray()); 
      hdnJurisdiction.Value = ReplacedJurisdiction; 
     } 
    } 
} 

含まれてい

  • [真] [アラバマ州] [いくつかの値]
  • [真] [アラスカ] [いくつかの値]
  • [偽] [ニューヨーク] [いくつかの値]
  • [偽] [カリフォルニア州] [いくつかの値]今

隠しフィールドは、アラバマ州、アラスカそれは一つだけ、すなわちアラスカを組み合わせている が含まれている必要があります...

+1

私たちは霊的ではありません。 –

+0

私はちょうどこの問題を解決するためにこの質問をしました。これは、スタックオーバーフローフローの仕事です。 – Nida

+3

いいえあなたは時間を無駄にして無料でお手伝いすることを人々に求めている無料のウェブサイトにいます。ここに**仕事**はありません。謙虚さのビットはあなたに長い道のりを取るでしょう。あなたの質問に完全な情報を提供します。 –

答えて

3

変数の範囲を変更する必要があります。 foreachループの外にあなたのリストを宣言し、計算を終えたら値を設定する必要があります。また、C#の一般的な命名規則とコーディング規則に合わせてコードを変更しました。

if (grdView.Rows.Count > 0) 
{ 
    var states = new List<string>(); 
    foreach (GridViewRow row in grdView.Rows) 
    { 
     var chkbox = row.FindControl("chkbox") as CheckBox; 
     if (chkbox.Checked) 
     { 
      var lblJurisdiction = row.FindControl("lblJurisdiction") as Label; 
      states.Add(lblJurisdiction.Text); 
     } 
    } 
    hdnJurisdiction.Value = string.Join(", ", states.Distinct().OrderBy(x => x)); 
} 
+0

実際にLINQを使用し、すべてのラベルテキストを選択してからJoinを使用する方が良いでしょう。これにより、別のリストを作成することはありません –

1

あなたは、文字列を連結しなければならないが、今あなたにあなたの隠しフィールドで上書きします

if(hdnJurisdiction.Value.Length > 0 && ReplacedJurisdiction != "") 
    hdnJurisdiction.Value += ", "; 

hdnJurisdiction.Value += ReplacedJurisdiction; 
0

元のコードではLINQはまったく使用されません。クエリフォームで、

var labels= grdView.Rows.OfType<GridViewRow>() 
       .Where(row=>(row.FindControl("chkbox") as CheckBox)?.Checked) 
       .Select(row=>(row.FindControl("lblJurisdiction") as Label)?.Text) 
       .Distinct() 
       .OrderBy(x=>x); 

またはこの:すべてのチェックを行のラベルを選択するためのLINQクエリは、この可能性があり

var labels=(from row in grdView.Rows.OfType<GridViewRow>() 
      let chkbox = row.FindControl("chkbox") as CheckBox 
      let label=row.FindControl("lblJurisdiction") as Label 
      where chkbox.Checked    
      select label.Text) 
      .Distinct().OrderBy(x=>x); 

あなたはすべてのラベルを持っていたら、あなたがそれらに参加することができます。

var text=String.Join(labels); 
関連する問題