2011-12-21 49 views
2

我的大腦累了,難倒所以想看看是否有人知道一個更好的方式來做到這一點:檢查和分配CheckBox值在C#中的字符串

我有4個複選框,用戶可以選擇無,一個,或全部或任何組合。然後在後面的代碼中,我想檢查所有的複選框,如果它已被選中,則取其值(文本),並將其分配給1個字符串,並根據需要用逗號分隔它。

這個效果很好,但是分配了所有.Text文件是否被檢查過。

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

我盯着它,我知道解決的辦法其實很簡單,但我太累了,顯然,現在想想,想找出我做錯了。代碼是C#(ASP.NET)。

如何輪詢4個CheckBoxes,如果它被檢查,然後將它的值賦給字符串,如果它沒有被選中則忽略它?

謝謝。

回答

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 
+0

結束了使用此選項,因爲這是一個非常簡單的表格,我不實際使用此一CheckBoxList的。它適用於我今天必須要做的快速表單。謝謝! – Valien 2011-12-21 20:49:39

+0

@Valien這裏的第一個方法(你選擇的那個)的一個問題是當CheckBox1沒有被選中時,你可能會得到',value,value,value'。需要考慮的事情。 – 2011-12-21 20:57:26

+0

@ DavidBrainer-Banker你是對的。該表顯示在表格中,但不是太在意,因爲它是在短時間內收集數據的快/髒表。當我將內容轉儲到電子表格時,我可能會手動刪除它。 – Valien 2011-12-22 20:20:55

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

但是,現在我意識到你真正需要的僅僅是那些被選中的複選框的值,而不管它們是否全部被選中。

List<String> values = new List<String>(); 
if (CheckBox1.Checked) result.Add(CheckBox1.Text); 
if (CheckBox2.Checked) result.Add(CheckBox2.Text); 
if (CheckBox3.Checked) result.Add(CheckBox3.Text); 
if (CheckBox4.Checked) result.Add(CheckBox4.Text); 
String result = String.Join(", ", values); 
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; 
    } 
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); 
+0

在你的第三行我不認爲有必要調用.ToArray()Join應該能夠隱式地從IEnumerable轉換。 – MBirchmeier 2011-12-21 20:23:28

+0

@MBirchmeier我也是在你需要'.ToArray()'爲'.Join'的印象之下。我想知道克勞迪奧和我在哪裏提出的。以下是有關它的答案的鏈接:http://stackoverflow.com/a/122760/61654。 – ahsteele 2011-12-21 20:24:53

+0

@MBirchmeier:我在3.5上測試它,IEnumerable不起作用。我錯過了什麼嗎? (我看到一個覆蓋接受IEnumerable爲4.0) – 2011-12-21 20:27:58

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