2014-02-07 69 views
2

我想連接CheckBoxList的選中值。我使用下面的代碼工作在後面的窗體的代碼罰款:將複選框值連接到類c的字符串#

string sFooType = ""; 

for (int i = 0; i < chkFooTypes.Items.Count; i++) 
{ 
    if (chkFooTypes.Items[i].Selected) 
    { 
     if (sFooType == "") 
      sFooType = chkFooTypes.Items[i].Text; 
     else 
      sFooType += "," + chkFooTypes.Items[i].Text; 
    } 
} 

不過,我想將此代碼放在自己的類需要時調用。同樣的CheckBoxList出現在兩種不同的形式 - 我試圖不重複代碼。我知道我有點迂腐,但它是學習的唯一途徑!

我可以填充公共列表,然後連接列表嗎?我被難倒的地方是班級將如何知道使用哪種控制/表單。

我的確嘗試改編this solution,但我無法擺脫它的困擾。我可以看到它是如何工作的文本框,但不是如何工作的CheckBoxList

回答

3

您可以創建一個extension-metho d它適用於任何ListControl(如CheckBoxListListBoxDropDownList):

string selectedItems = chkFooTypes.GetSelectedItemText(); 

請注意,您需要:

public static class ListControlExtensions 
{ 
    public static string GetSelectedItemText(this ListControl list, string separator = ",") 
    { 
     return string.Join(separator, list.Items.Cast<ListItem>() 
      .Where(li => li.Selected) 
      .Select(li => li.Text)); 
    } 
} 

你以這種方式使用它加using System.Linq;

+1

這是非常優雅。不太明白,但優雅一切!謝謝。 – ComfortablyNumb

1

您應該將其包裝到一個方法中,並將CheckBoxList作爲參數傳遞。

public string GetConcatenation(CheckBoxList list) 
{ 
    string value= ""; 
    for (int i = 0; i < list.Items.Count; i++) 
    { 
     if (list.Items[i].Selected) 
     { 
      if (value== "") 
       value= list.Items[i].Text; 
      else 
       value+= "," + list.Items[i].Text; 
     } 
    } 
    return value; 
} 

,然後調用這樣的方法:

string concatenatedValue= GetConcatenation(chkFooTypes); 

要使它從一個具體的控制型抽象,你可以通過ListItemCollection:

public string GetConcatenation(ListItemCollection list) 
{ 
    string value= ""; 
    for (int i = 0; i < list.Count; i++) 
    { 
     if (list[i].Selected) 
     { 
      if (value== "") 
       value= list[i].Text; 
      else 
       value+= "," + list[i].Text; 
     } 
    } 
    return value; 
} 

,然後調用類的方法這個:

string concatenatedValue= GetConcatenation(chkFooTypes.Items); 
1

聽起來像是重用你更好的解決辦法是有,你可以打電話,並通過列表的右邊的實例的常用方法:

public string ConcatCheckboxlist(CheckBoxList chklist) 
{ 
    string sRet; 
    if (chklist.Items[i].Selected) 
    { 
     if (sRet == "") 
      sRet= chklist.Items[i].Text; 
     else 
      sRet+= "," + chklist.Items[i].Text; 
    } 
    return sRet; 
} 

這個調用這個與你的CheckBoxList:

string sFooType = ConcatCheckboxlist(chkFooTypes); 
2

你需要傳遞的CheckBoxList作爲參數,該功能

使用此

public string getstring(CheckBoxList chk) 
{ 
    string sFooType = ""; 
    for (int i = 0; i <= chkFooTypes.Items.Count - 1; i++) { 
     if (chkFooTypes.Items(i).Selected) { 
      if (string.IsNullOrEmpty(sFooType)) { 
       sFooType = chkFooTypes.Items(i).Text; 
      } else { 
       sFooType += "," + chkFooTypes.Items(i).Text; 
      } 
     } 
    } 
    return sFooType; 
} 

而且你可以從任何地方 調用此功能。例如

private void Button1_Click(object sender, EventArgs e) 
{ 
    string s = ""; 
    s = getstring(chkFooTypes); 
} 
+1

非常適合我,謝謝。我確實需要匹配參數 - 'chk'通過,但'chkFooTypes'被使用。不錯的解決方案! – deebs