复选框列表选中的值

时间:2011-06-28 21:50:10

标签: c# asp.net

我有一个包含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#i实现的:

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

输出:如果用户选择社会学和动物学,我希望输出为“社会学,动物学” 但是我上面的代码给了我以下结果“社会学,社会学”。

6 个答案:

答案 0 :(得分:7)

我创建了一个Custom 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/

答案 1 :(得分:5)

希望以下功能可以帮助您获得结果

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

values = values.TrimEnd(',');

答案 2 :(得分:2)

var selectedValues =
    (from item in interestedIN.Items.Cast<ListItem>() where item.Selected select item.Text).ToArray();
var selectedValuesJoined = string.Join(",", selectedValues);

答案 3 :(得分:1)

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

string interestIN = String.Empty;

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

我的代码有一个问题,即最后一项会有一个尾随逗号,但你可以弄清楚如何去除它。这将使你获得99%。

答案 4 :(得分: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;
    }
}

答案 5 :(得分:-2)

使用以下内容:

Boolean addSeperator = false;

foreach (ListItem li in interestedIN.Items)
{

    if (addSeperator)
    {
        interestIN += ", ";
        addSeperator = false;
    }
    if (li.Selected)
    {
        interestIN += li.Text;
        addSeperator = true;
    }
}