2016-10-19 165 views
1

我已經爲列值在網格視圖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; 
     } 
    } 
} 

結合所有那些複選框被選中(真)行「lblJurisdiction」對於如網格視圖包含寫了下面的代碼

  • [真] [阿拉巴馬] [某些值]
  • [真] [阿拉斯加] [某些值]
  • [虛假] [紐約] [某些值]
  • [虛假] [加州] [某些值]

現在隱藏字段應包含阿拉巴馬,阿拉斯加 它結合只有一個,即阿拉斯加......

+1

我們不是通靈。 –

+0

我剛纔問過這個問題,以解決這個問題,這是stackover流程傳送者的工作。 – 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。 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); 

或本,查詢方式:

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);