我想连接CheckBoxList
的已检查值。我正在使用以下代码,它在后面的代码中运行良好:
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
的作用。
答案 0 :(得分:3)
您可以创建适用于任何ListControl
的{{3}} d(例如CheckBoxList
,ListBox
或DropDownList
):
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));
}
}
你以这种方式使用它:
string selectedItems = chkFooTypes.GetSelectedItemText();
请注意,您需要添加using System.Linq;
。
答案 1 :(得分: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);
}
答案 2 :(得分: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);
答案 3 :(得分: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);