2011-06-28 114 views
2

我有一个复选框列表中有3个项目。我想将复选框列表中的所有选中值复制到一个字符串中。我尝试了下面的代码,但它没有给出正确的结果。 任何人都可以帮助我。复选框列表选中的值

<asp:checkboxlist id="interestedIN" runat="server" repeatlayout="table" 
    cellspacing="3" cellpadding="3" Font-Size="12px"> 
    <asp:ListItem id= "social" runat="server" text=" Sociology" Selected="false" /> 
    <asp:ListItem id="zoo" runat="server" text=" Zoology " Selected="false" /> 
    <asp:ListItem id="math" runat="server" text=" mathematics " Selected="false" /> 
</asp:checkboxlist> 

这里是C#,我实现:

foreach (ListItem li in interestedIN.Items) 
     { 
      if (li.Selected) 
      { 
       interestIN = interestedIN.SelectedItem.Value + "," + interestIN; 
      } 
     } 

输出:如果用户选择了社会学和动物,我想有输出作为“社会学,动物学” 但我上面的代码给我追随结果“社会学,社会学”。

回答

-2

使用以下命令:

Boolean addSeperator = false; 

foreach (ListItem li in interestedIN.Items) 
{ 

    if (addSeperator) 
    { 
     interestIN += ", "; 
     addSeperator = false; 
    } 
    if (li.Selected) 
    { 
     interestIN += li.Text; 
     addSeperator = true; 
    } 
} 
2
var selectedValues = 
    (from item in interestedIN.Items.Cast<ListItem>() where item.Selected select item.Text).ToArray(); 
var selectedValuesJoined = string.Join(",", selectedValues); 
7

我创建了一个自定义的CheckBoxList与这个属性。把它放在控件中很好,所以你不必每次都写代码。自定义控件允许您引用四个属性:

  • SelectedValuesString - 以逗号分隔的所选值的字符串。
  • SelectedValuesAsIntegers - 整数所选值的列表。
  • SelectedValuesAsStrings - 一个字符串所选值的列表。
  • SelectedItemTextAsStrings - 所选项目文本的字符串列表。

这里是SelectedValuesAsString属性。

public string SelectedValuesString 
{ 
    get 
    { 
     return String.Join(",",this.Items.Cast<ListItem>().Where(i => i.Selected).Select(i=>i.Value)); 
    } 
} 

要查看自定义CheckBoxList控件后,看到http://www.foliotek.com/devblog/extended-checkboxlist-control/

5

希望下面的功能将帮助您得到的结果

for (int i = 0; i < interestedIN.Items.Count; i++) 
{ 
    if (interestedIN.Items[i].Selected) 
    { 
     values += interestedIN.Items[i].Value + ","; 
    } 
} 

values = values.TrimEnd(','); 
1

我知道这个问题已经很老了,但我有一个解决方案。您的问题在于您正在查看列表控件的选定项目,根据列表控件运行时的状态,列表控件的状态可能并非您所需。您需要查看当前正在迭代的项目并从中获取文本值。

string interestIN = String.Empty; 

foreach (ListItem li in interestedIN.Items) 
{ 
    if (li.Selected) 
    { 
     interestIN += li.Text + ", "; 
    } 
} 

我的代码有一个问题,即最后一个项目都会有一个结尾逗号,但你可以找出如何剥离了这一点。这会让你99%。

1

作出纳尼亚的出色答卷稍有变化使用C#扩展方法:

public static class ExtendedCheckBoxList 
{ 

    public static string SelectedValuesAsCommaDelimmittedString(this CheckBoxList thatCheckBoxList) 
    { 

     List<string> selectedValuesAsStrings = thatCheckBoxList.SelectedValuesAsStrings(); 

     string commaDelimmittedStringOfValues = String.Join(",", selectedValuesAsStrings); 

     return commaDelimmittedStringOfValues; 
    } 


    public static List<string> SelectedValuesAsStrings(this CheckBoxList thatCheckBoxList) 
    { 
      List<string> selectedValuesAsStrings = thatCheckBoxList 
                   .Items 
                   .Cast<ListItem>() 
                   .Where(i => i.Selected) 
                   .Select(i => i.Value) 
                   .ToList(); 

      return selectedValuesAsStrings; 
    } 
} 
+1

决定今天把你超过1000 ...哈哈哈!^_- – SeanKendle