检查并将复选框值分配给C#中的字符串

时间:2011-12-21 20:10:17

标签: c# asp.net

我脑筋疲惫而难倒,所以想知道是否有人知道更好的方法:

我有4个复选框,用户可以选择无,一个或全部,或任何组合。然后在后面的代码中,我想检查所有的CheckBoxes,如果它已被选中,则取其值(文本)并将其分配给1个字符串,并根据需要用逗号分隔。

这很好用但是会分配所有.Text是否已经检查了这些项目。

 if (CheckBox1.Checked || CheckBox2.Checked || CheckBox3.Checked || CheckBox4.Checked)
    {
      ClientString = CheckBox1.Text + ", " + CheckBox2.Text + ", " + CheckBox3.Text + ", " + CheckBox4.Text; 
    }

我正盯着它,我知道解决方案非常简单,但我现在已经太累了,无法想清楚,想知道我做错了什么。代码是C#(ASP.NET)。

如何轮询4个CheckBox并检查它是否已将其值分配给字符串并在未检查时忽略它?

感谢。

5 个答案:

答案 0 :(得分:6)

这样的事情怎么样? (未经测试)

对于.NET 3.5

var checkboxList = new List<CheckBox>{CheckBox1,CheckBox2,CheckBox3,CheckBox4};
var messages = checkboxList
      .Where(x => x.Checked)
      .Select(x => x.Text)
      .ToArray();
ClientString = string.Join(", ", messages);

适用于.NET 4.0

var checkboxList = new List<CheckBox>{CheckBox1,CheckBox2,CheckBox3,CheckBox4};
var messages = checkboxList
      .Where(x => x.Checked)
      .Select(x => x.Text);
ClientString = string.Join(", ", messages);

答案 1 :(得分:3)

对于一系列if语句,最蛮力的方法有几种选择。

// this runs the risk of a hanging chad
// i.e. ", value, value"
ClientString = String.Empty;

if (CheckBox1.Checked)
   ClientString = CheckBox1.Text;
if (CheckBox2.Checked)
   ClientString += ", " + CheckBox2.Text;
if (CheckBox3.Checked)
   ClientString += ", " + CheckBox3.Text;
if (CheckBox4.Checked)
   ClientString += ", " + CheckBox4.Text;

那说你可能最好使用CheckBoxList和lambda表达式。

ClientString = checkboxBoxList.Items.Cast<ListItem>()
               .Where(i => i.Selected)
               .Join(", ", i => i.Text);

对于.NET 2.0,这样的事情可能是最好的:

List<string> cbTexts = new List<string>();

if (CheckBox1.Checked)
   cbText.Add(CheckBox1.Text);
if (CheckBox2.Checked)
   cbText.Add(CheckBox2.Text);
if (CheckBox3.Checked)
   cbText.Add(CheckBox3.Text);
if (CheckBox4.Checked)
   cbText.Add(CheckBox4.Text);

string ClientString = String.Empty;

foreach (string cbText in cbTexts)
{
  ClientString += cbText ", ";
}

ClientString.Remove(ClientString.Length - 2); // remove trailing comma

答案 2 :(得分:1)

好吧,我把你的问题看作是询问所有复选框的价值,如果它们全部被选中并基于此我说:当我认为你打算用{{1时,你用OR写了这个}}

AND

然而,现在我意识到你真正想要的只是那些被选中的复选框的价值而你想要它们是否全部被选中。您可以通过连接列表来执行此操作:

if (CheckBox1.Checked && CheckBox2.Checked && CheckBox3.Checked && CheckBox4.Checked)
{
    ClientString = String.Format("{0}, {1}, {2}, {3}", CheckBox1.Text, CheckBox2.Text, CheckBox3.Text, CheckBox4.Text); 
}

答案 3 :(得分:1)

你可以这样做

//clear the string 
String ClientString = String.Empty;
     if (CheckBox1.Checked )
        ClientString = CheckBox1.Text
     if (CheckBox2.Checked )
        ClientString += ", " + CheckBox2.Text;
     if (CheckBox3.Checked )
        ClientString += ", " + CheckBox3.Text;
     if (CheckBox4.Checked )
        ClientString += ", " + CheckBox4.Text;

以下代码的作用是if any checkbox is checked then combine text value of all the checkboxes

if (CheckBox1.Checked || CheckBox2.Checked || CheckBox3.Checked || CheckBox4.Checked)
    {
      ClientString = CheckBox1.Text + ", " + CheckBox2.Text + ", " + CheckBox3.Text + ", " + CheckBox4.Text; 
    }

答案 4 :(得分:1)

以逗号分隔列表:

TextList textlist = new List<string>();
if (CheckBox1.Checked) textlist.Add(CheckBox1.Text);
if (CheckBox2.Checked) textlist.Add(CheckBox2.Text);
if (CheckBox3.Checked) textlist.Add(CheckBox3.Text);
if (CheckBox4.Checked) textlist.Add(CheckBox4.Text);
ClientString clientString = string.Join(",", textlist);