2016-10-19 142 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);