【问题标题】:Concatenate Checkboxlist Values to String via Class c#通过类 c# 将复选框列表值连接到字符串
【发布时间】:2014-02-07 10:54:32
【问题描述】:

我想连接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

【问题讨论】:

    标签: c# checkboxlist


    【解决方案1】:

    您可以创建一个适用于任何ListControlextension-method(如CheckBoxListListBoxDropDownList):

    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;

    【讨论】:

    • 这很优雅。不是很懂,不过还是挺优雅的!谢谢。
    【解决方案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);
    }
    

    【讨论】:

    • 非常适合我,谢谢。我确实必须匹配参数 - 传递了“chk”,但使用了“chkFooTypes”。很好的解决方案!
    【解决方案3】:

    听起来你更好的重用解决方案是有一个通用方法,你可以调用并传入列表的正确实例:

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

    【讨论】:

      【解决方案4】:

      您应该将它包装到一个方法中并将您的 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);
      

      【讨论】:

        猜你喜欢
        • 2019-01-05
        • 2020-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-21
        相关资源
        最近更新 更多