【问题标题】:how to bind a comma separate string to listbox in c#如何在c#中将逗号分隔的字符串绑定到列表框
【发布时间】:2014-07-04 13:44:45
【问题描述】:

我如何将逗号分隔的字符串(例如:monday,tuesday)绑定到列表框控件,因为当列表框已经这样填充时,这些项目被选中? 星期日 周一 周二 周三 周四 星期五 星期六

我从以下代码开始:

string days = null;
List<string> lstdays = new List<string>();

//I get the values from a table such as:

foreach (DataRow dr in dt.Rows) {
//other items
days = dr(7).ToString();
}


if (days.Contains(",")) {
//days =  Tuesday,Thursday

}
else
{
  //days = Monday
 lstbxDays.SelectedValue = days;  //means there is a single day
}

【问题讨论】:

  • 我觉得你的问题很可疑。你想要实现什么(更大的目标)?
  • 想要将逗号分隔的列表绑定到列表框并将这些项目显示为被选中

标签: c# asp.net


【解决方案1】:

你可以对字符串使用Split()方法:

string[] newDays=days.Split(',');

foreach (string d in newDays)
{
 lstDays.Add(d);  //add single day to days List
}

如果您还定义了 listBox ,例如 listbox1,您可以说:

listbox1.DataSource=lstDays;

如果您已将日期绑定到列表框,那么如果用户选择了一天(我不知道您如何在程序中通过按钮、网格等设置它),您可以设置:

listbox1.SelectedValue = day; //where day is the var user selects

【讨论】:

  • 我尝试了以下方法,但它只选择了列表中的最后一项:
  • if (days.Contains(",")) { //将此字符串绑定到列表框 -- Tuesday,Thursday string[] newDays = days.Split(','); foreach(newDays 中的字符串 d){ lstbxDays.SelectedValue = d; //只获取列表中的最后一天并选择它 } } else { lstbxDays.SelectedValue = days; }
  • 如果 days 包含用逗号分隔的所有日期,则上述代码(不包括其他任何内容)将添加列表和列表框中的所有日期
  • 是的,会添加,但我已经将它们绑定到列表框。我正在查询一个表以查找用户之前选择/插入的表。所以从那个数据行我需要突出显示用户拥有的那些。 this: foreach (DataRow dr in dt.Rows) { //其他项目 days = dr(7).ToString(); } 从表中获取用户选择的日期,因此字符串 days 包含逗号分隔的列表。现在我有 lstbxDays 预填充了另一种方法的所有天数。现在基于字符串 days 中的值,我需要在 lstbxDays 中选择给定的日期。
  • 让我先搞清楚这个..您希望您的列表框在每个选择中仅包含一天或多天?
【解决方案2】:

如果您从DataTable 获取数据,则类似于

void BindDayList( ListBox lb , DataTable dt , string textColumnName , string valueColumnName )
{
  lb.DataSource     = dt              ;
  lb.DataTextField  = textColumnName  ;
  lb.DataValueField = valueColumnName ;
  lb.DataBind()     ;
  return ;
}

如果你有一个扁平的字符串,那么下面的方法可能会起作用:

void BindDayList( ListBox lb , string listOfDays )
{
  int i = 0 ;
  lb.DataSource = days
                  .Split(',')
                  .Select( x => new ListItem( (++i).ToString() , x.Trim() ) )
                  ;
  lb.DataBind() ;
  return ;
}

【讨论】:

  • ListBoxItem 仅在 winforms 中可用还是我遗漏了什么?
  • @user3642720:对不起,ListItem,不是ListBoxItem
  • 我尝试了第二个示例,它用数值替换了列表框中的所有内容。所以没有选择它:1和2
  • 构造函数中的第一个值是列表项(键)的;第二个是它的文本(显示)值。随意阅读文档并对其进行调整以适应。
【解决方案3】:

你可以这样做

lstbxDays.DataSource = days.Split(','); 

考虑到 days 是您的逗号分隔字符串
希望这会有所帮助!

【讨论】:

  • 如果我想填充一个列表框,对吧?我想我需要遍历列表中的项目并选择它们。
  • 是的,当您想用逗号分隔值绑定列表时。您还想选择列表中的所有项目吗?
  • 是的,在列表框中显示用户选择的项目
  • 好的,这样做 lstbxDays.SelectionMode = SelectionMode.MultiExtended;并在绑定数据后为 (int i = 0; i
  • setselected 未知
【解决方案4】:

感谢大家提供的示例帮助 - 使用此代码选择多天:

//days = tuesday,thursday

string[] s = days.Split(new char[] { ',' });

foreach (string lst in s)
{
 lstbxDays.Items.FindByText(lst.ToString()).Selected = true;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多